【问题标题】:Mustache template with different states具有不同状态的小胡子模板
【发布时间】:2012-02-27 01:43:34
【问题描述】:

我的模型上有一个状态标志,它可以采用以下四个值之一:活动、非活动、处理或上传。

在胡子模板中,我想根据状态标志的值打开和关闭模板的不同部分。有没有一种体面的方法来做到这一点?

我真的不想有 4 个不同的模板——每个州一个。

我尝试在返回this.get('status') === 'active' 的模型上使用 isActive、isProcessing 等方法,但作为一个函数,它不会被传递到模板中。

【问题讨论】:

  • 你应该可以使用{{#isActive}} this content is only shown if isActive() returns a truthy value {{/isActive}},根据isActive的返回值显示模板的一部分。
  • 你不能有纯 JSON 的函数,所以就像下面的答案说你需要通过拦截 toJSON 调用来表示具有属性的值
  • 好吧,你没有提到你正在传递 JSON

标签: javascript templates backbone.js mustache hogan.js


【解决方案1】:

AFAIK,通常的方法是使用toJSON 将您的模型转换为简单的数据块,然后将数据块交给您的 Mustache 模板。因此,您需要做的就是提供您自己的toJSON,其中包含您的方法调用作为属性。例如:

toJSON: function() {
    var json = Backbone.Model.prototype.toJSON.call(this);
    json.isActive     = this.isActive();
    json.isProcessing = this.isProcessing();
    return json;
}

演示(请打开您的控制台):http://jsfiddle.net/ambiguous/22aYH/

然后,您可以在模板中包含这样的内容:

{{#isActive}}It is active!{{/isActive}}
{{#isProcessing}}Be patient, we're working on it...{{/isProcessing}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多