我有以下下划线代码,它从外部JSON中提取数据并将其显示在列表中。
<script type="text/template" class="template">
<ul>
<% _.each( rc , function(productTile) {
if(_.findWhere(ids,productTile.id){
%>
<li class="productTile" data-id="<%= productTile.id %>">
<img src="<%= productTile.images[0] %>" alt=""/>
<h3>Demo<%= productTile["name"] %></h3>
<p><%= productTile.price.formatted %></p>
</li>
<% } }); %>
</script>
var listingTemplate = _.template(
$( "script.template" ).html()
);
在外部JSON文件中有大约30种产品,但我只想显示6种特定产品的信息,我在这个内部JSON中声明:
var templateData = {
"ultimate": [
{
"id": "50236775",
"id": "50237067",
"id": "50236776",
"id": "50236777",
"id": "50236778"
}
]
}
我正在使用if(_.findWhere(ids,productTile.id){
,但它不起作用,写入的方式有问题吗?
答案 0 :(得分:1)
首先,您的内部JSON不正确,您不能在对象中使用相同的键id
。您应该只创建一个ids
:
var ids = ["50236775","50237067","50236776","50236777","50236778"];
添加签入模板:
<script type="text/template" class="template">
<ul>
<% _.each( rc , function(productTile) {
//ids is external array passed to template
if(_.contains(ids, productTile.id)){
%>
<li class="productTile" data-id="<%= productTile.id %>">
<img src="<%= productTile.images[0] %>" alt=""/>
<h3>Demo<%= productTile["name"] %></h3>
<p><%= productTile.price.formatted %></p>
</li>
<%
}
});
%>
</ul>
</script>
尝试this使用下划线模板。
另一种方法:
在您通过rc
模板过滤产品之前:
var rc = _.filter(rc, function(productTile){
return _.contains(ids, productTile.id);
});
在这种情况下,您无需更新模板。