javascript - mustache js排序

标签 javascript mustache

我知道 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}}

但没有任何改变......

最佳答案

{{#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}}

关于javascript - mustache js排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21603318/

相关文章:

backbone.js - Backbone.JS 如何处理具有计算属性的模型

templating - Mustache - 我怎样才能为一个可迭代对象做一些*一次*的事情?

javascript - 如何限制 mustache 的迭代

javascript - moment.duration 字符串给出 nan 值

javascript - 测试客户端是否支持 css prop。重复后代码中断

ruby-on-rails - 火腿 + mustache

php - 使用 Php、IOS、Android 的 Handlebars

javascript - 如何保证网页打开时元素在 View 中?

javascript - 计算从今天开始过去了多少天

javascript - 在 react/redux 中传递多个 props 和 action