如何使用Mustache JavaScript的for each循环?

10

我有一些 JSON 对象,其中一些对象内部还有其他对象。

如果我只保留没有其他对象的 JSON 对象,然后应用模板,一切都正常,我会得到 3 个 li 元素。

但是如果我获取原始的 JSON 对象,结果会有点奇怪。我相信我需要使用 each 语句来迭代每个主 JSON 对象内部的每个子 JSON 对象。

也许我有点困惑,所以这里是一些代码。

我有一些像这样的 JSON 数据:

{
"msg_id":"134",
"message":"Nick",
"comment":[
    {
    "com_id":"9",
    "comment":"test",
    },
    {
    "com_id":"10",
    "comment":"testtt",
    },
    {
    "com_id":"11",
    "comment":"testtttt",
    }]
},
{
"msg_id":"134",
"message":"Nick",
},
{
"msg_id":"134",
"message":"Nick",
}

我正在尝试得到类似于以下内容:
Nick

测试

测试

测试

Nick Nick

我创建了如下模板:

function messagesTamplate(data)
{
    $.each(data, function(index, obj)
    {
        msg += template.replace( /{{message}}/ig , obj.message );
        if(obj.comment) {
            $.each(obj.comment, function(key, val)
            {
               msg += template.replace( /{{comment}}/ig , val.comment );      
            });
        }

    });

    return msg;
}

然后我只需将其附加到主要的ul中。
谢谢。

为什么这个 JSON 看起来不对?这是一个数组中的 3 个对象吗?还是只有 3 个对象?它们如何用逗号分隔? - Joseph
1个回答

29

data 需要是一个数组 (参见封闭的 [])

var data = [{
  "msg_id": "134",
  "message": "Nick",
  "comment": [{
    "com_id": "9",
    "comment": "test",
  }, {
    "com_id": "10",
    "comment": "testtt",
  }, {
    "com_id": "11",
    "comment": "testtttt",
  }]
}, {
  "msg_id": "134",
  "message": "Nick",
}, {
  "msg_id": "134",
  "message": "Nick",
}]

在Mustache模板中,就只是这样:

{{#data}}         //loop through all data
  {{message}}     //pick out the "message" per iteration
  {{#comment}}    //loop through all comments in an iterated item
    {{comment}}   //pick out the comment
  {{/comment}}
{{/data}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接