2015-01-02 2 views
1

У меня есть JSON объект:Рули поиска в массиве

{ 
    groups: [ 
     {id: 1, title: "group1"}, 
     {id: 2, title: "group2"}, 
    ], 
    users: [ 
     {id:1, login: "user1", groupId: 1}, 
     {id:2, login: "user2", groupId: 2}, 
     {id:3, login: "user3", groupId: 1} 
    ] 
} 

и рули шаблона:

{{#each users}} 
    <tr data-id="{{id}}"> 
     <td>{{login}}</td> 
     <td data-id="{{groupId}}">{{lookup ../groups groupId}}{{title}}</td> 
    </tr> 
{{/each}} 

, но он не работает. Компиляция шаблона и рендеринг таблицы, но столбец таблицы содержит только id как атрибут тега td. Как отобразить заголовок группы внутри тега td (возможно ли с помощью руля с использованием этого объекта JSON)?

+0

Что такое помощник поиска? – raidendev

+0

С сайта handlebars (http://handlebarsjs.com/builtin_helpers.html): Вспомогательный помощник позволяет динамически изменять параметры с помощью переменных Handlebars. Это полезно для определения значений для индексов массива. – Bet

ответ

1

Помощник lookup только смотрит вверх по индексу массива, а не но идентификатор, но вы можете на скорую руку помощник, чтобы сделать это:

Handlebars.registerHelper('lookup2', function(collection, id) { 
    var collectionLength = collection.length; 

    for (var i = 0; i < collectionLength; i++) { 
     if (collection[i].id === id) { 
      return collection[i]; 
     } 

    } 

    return null; 
}); 

Тогда вам нужно для поиска названия от этого объекта. Здесь я использую #with для изменения контекста:

{{#each users}} 
    <tr data-id="{{id}}"> 
     <td>{{login}}</td> 
     <td data-id="{{groupId}}">{{#with (lookup2 ../groups groupId)}}{{title}}{{/with}}</td> 
    </tr> 
{{/each}} 
Смежные вопросы