【问题标题】:How do I loop through JavaScript objects in Jade?如何在 Jade 中循环遍历 JavaScript 对象?
【发布时间】:2015-03-17 21:02:55
【问题描述】:

Node.js - Jade - socket.io - jQuery - JSON

在我的“index.jade”中,我有以下代码,其中“结果”数据作为 JSON 来自后端:

extends layout

block content
 ul
 // more jade html here

 script.
  socket.on('results', function(results) {
   results.forEach(function(item){
   name = item.name;
   $('ul').append('<li>'+name+'</li>');
  });
 });

这可行,但是,因为稍后我将有更多的内容和标签推送到“ul”中,所以我不想在“append()”中包含大量连接的 html。

我真的很喜欢 Jade 格式:

ul
 each val, index in results
 li= results[index].name

虽然我不能在我的“块内容”中编写最后一段代码,因为“socket.on('results')”尚未触发并引发错误。

有没有优雅的写法?

【问题讨论】:

  • 您可以在数据返回后重新渲染布局。在初始渲染时,您可以只渲染加载微调器或某种空状态。数据到来后,重新渲染并包含所有名称
  • 追加一次(大块 html)比多次追加小块更有效
  • 谢谢。本质上我的问题是:而不是有一个又长又丑的 append('
  • name: '+name+'
    • age: '+age+'
  • ') 等等……我可以有一个附加(模板),其中模板是保存在别处的一块单独的玉石吗?

标签: javascript jquery json node.js pug


【解决方案1】:

您也可以在客户端上使用翡翠。看看jadeifyhttps://github.com/domenic/jadeify

例如,您将拥有row.jade,并在每个套接字消息上附加一行:

var template = require('views/row.jade');
var $ul = $('ul');
socket.on('row',  function(item) {
    $uk.append(template(item));
});

然后将套接字调整为一次发射一行。

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签