1

我有以下 JSON,本质上是一个外部对象数组 ( Outer),每个对象都可能包含一个内部对象数组 ( Inner):

{ "Outer": [{"OuterName": "OuterName1",
             "Inner": [{"InnerName": "InnerName1"}, 
                       {"InnerName": "InnerName2"}]
            },
            {"OuterName": "OuterName2",
             "Inner": [{"InnerName": "InnerName3"}, 
                       {"InnerName": "InnerName4"}]
            }]
}

我有一个构建无序列表的 ICanHaz 模板。每个Inner数组中的每个对象都必须有一个列表项。

<script type="text/html" id="tmp">
    <ul>
        {{#Outer}}
        {{#Inner}}
        <li>
            {{OuterName}} - {{InnerName}} 
        </li>
        {{/Inner}}
        {{/Outer}}
    </ul>
</script>

问题是,似乎无法OuterName#Inner条件中引用。因此输出如下所示:

 - InnerName1
 - InnerName2
 - InnerName3
 - InnerName4

当我期待:

OuterName1 - InnerName1
OuterName1 - InnerName2
OuterName2 - InnerName3
OuterName2 - InnerName4

有谁知道我该如何解决这个问题?或者我只需要重组我的 JSON 以便Inner数组也包含OuterName?

4

2 回答 2

3

那是有效的胡子。问题很可能出在您的库版本中。

ICanHaz 附带 Mustache.js v0.4.0。当前版本(八个版本和 16 个月后)是 0.7.2。切换到ICanHaz-no-mustache.js,并带上你自己的小胡子。那应该解决它。

这是使用最新版本的 Mustache.js 的模板的小提琴:

var tpl  = $('#tpl').html();

var data = { "Outer": [{"OuterName": "OuterName1",
             "Inner": [{"InnerName": "InnerName1"}, 
                       {"InnerName": "InnerName2"}]
            },
            {"OuterName": "OuterName2",
             "Inner": [{"InnerName": "InnerName3"}, 
                       {"InnerName": "InnerName4"}]
            }]
};

$('#output').html(Mustache.to_html(tpl, data));
于 2013-05-09T15:36:38.757 回答
1

我不熟悉你的模板,但是类似的东西呢:

<script type="text/html" id="tmp">
    <ul>
        {{#Outer}}
        <li>
            {{OuterName}} - {{#Inner}}{{InnerName}}{{/Inner}}
        </li>
        {{/Outer}}
    </ul>
</script>

如果这不起作用,我深表歉意,看来我很有可能只是在扼杀语法。:)

于 2013-05-08T17:46:31.247 回答