使用Underscore进行过滤

时间:2013-12-05 10:16:24

标签: underscore.js

我有以下下划线代码,它从外部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){,但它不起作用,写入的方式有问题吗?

1 个答案:

答案 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);
});

在这种情况下,您无需更新模板。