如何从车把模板访问骨干模型的计算字段?

Jua*_*nma 13 backbone.js handlebars.js

我想从模板访问我在模型(backbone.js)中实现的计算字段.我是否需要始终定义帮助程序来执行此操作?

我认为问题与我将模型传递给模板的方式有关.如果我传递this.model.toJSON(),我可以访问属性,但不能访问我在其中定义的函数.如果我直接传递this.model,我可以访问该函数,但不能访问骨干模型的属性.

Der*_*ley 17

始终传递this.model.toJSON()给您的模板.

获取计算值需要做的是覆盖toJSON模型上的方法.


MyModel = Backbone.Model.extend({

  myValue: function(){
    return "this is a calculated value";
  },

  toJSON: function(){
    // get the standard json for the object
    var json = Backbone.Model.prototype.toJSON.apply(this, arguments);

    // get the calculated value
    json.myValue = this.myValue();

    // send it all back
    return json;
  }

})
Run Code Online (Sandbox Code Playgroud)

现在您可以myValue从返回的JSON 访问toJSON,这意味着您可以在视图中访问它.

正如您所提到的,另一个选项是构建辅助方法并使用Handlebars注册它们.除非您有一些功能根据模板的呈现方式而变化,和/或传递给模板的数据,否则我不会为此烦恼.

  • 重写`toJSON`有一个缺点:`Backbone.sync`使用`toJSON`来序列化模型(更准确地说,`sync`调用`JSON.stringify`调用`toJSON`)所以现在服务器将看到`myValue`即使它可能不关心它.这可能是也可能不是问题. (10认同)