2013-12-05 2 views
0

У меня есть следующий код подчеркивания, который извлекает данные из внешнего 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

Первое, что ваш внутренний 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> 

Try this играть с подчеркиваниями шаблонов.

Другой подход:

Перед тем, как передать rc в шаблон фильтра продукции:

var rc = _.filter(rc, function(productTile){ 
    return _.contains(ids, productTile.id); 
}); 

В этом случае вам не придется обновить свой шаблон.

+0

Привет, спасибо, что фильтр не работает по какой-либо причине :( – user1937021

+0

не нашел бы лучше? – user1937021

+0

Убедитесь, что 'ids' и' productTile.id' являются либо 'string', либо' number'. Попробуйте '_.contains (ids, productTile.id +" ")', если 'ids' - это массив строк. –

Смежные вопросы