2014-02-06 5 views
1

Я знаю, что Mustache это «логика меньше» сценариев шаблон, но, вероятно, что я ищу существует ...Усы заказ на расслоение плотной

Представьте иметь модель, как это:

var users = [{ 
    {name: "Lorem", isOk: false}, 
    {name: "Ipsum", isOk: true}, 
    {name: "Dolor", isOk: false}, 
    {name: "Sit", isOk: false}, 
    {name: "Amet", isOk: true} 
}]; 

Когда я создаю шаблон для пользователей:

{{#users}} 
    <p>{{name}}</p> 
{{/users}} 

Он отображает все в порядке порядка.

Есть ли возможность сначала загрузить isOk: true, а после них остальные?

Я попытался с:

{{#users}} 
    {{#isOk}} 
    <p>{{name}}</p> 
    {{/isOk}} 
    {{^isOk}} 
    <p>{{name}}</p> 
    {{/isOk}} 
{{/users}} 

Но изменить ничего ...

ответ

3

{{#users}} оборачивает весь список, чтобы содержимое повторяется для каждого элемента. Вам нужно будет дважды перебирать список по списку, чтобы разделить его так.

{{#users}} 
    {{#isOk}} 
    <p>{{name}}</p> 
    {{/isOk}} 
{{/users}} 
{{#users}} 
    {{^isOk}} 
    <p>{{name}}</p> 
    {{/isOk}} 
{{/users}} 

Конечно, вы могли бы разделить этот список, прежде чем запускать над ним дважды:

// in js, divide in good & bad, join afterwards 
var goodUsers = [], 
    badUsers = [], 
    sortedUsers = []; 
users.forEach(function(user) { 
    if (user.isOk) { 
    goodUsers.push(user); 
    } else { 
    badUsers.push(user); 
    } 
}); 
sortedUsers = goodUsers.concat(badUsers); 

Таким образом, вы только должны использовать свой код один раз, но работать на отсортированном списке:

{{#sortedUsers}} 
    <p>{{name}}</p> 
{{/sortedUsers}} 
+0

Спасибо, это работает ... немного беспорядочно повторять все, кроме работы ... –

+0

Обновлен мой ответ, чтобы уменьшить беспорядочные повторения. – Tharabas

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