在我遇到过的任何例子中,我都没有看到过这种类型的东西。我需要创建一个依赖于其他属性的属性函数。例如:
# coffeescript
class Person extends Backbone.Model
fullName: -> @get('first') + ' ' + @get('last')
class MyView extends Backbone.View
template: ...
render: ->
@$el.html @template(@model.toJSON())
new MyView(new Person(first:'Joe', last:'Moe)
# my template
<span><%= fullName %></span>
在大多数示例中,我看到模型在传递给模板之前总是转换为JSON,那么有没有办法设置toJSON方法来包含这个fullName
属性?或者我应该将模型传递给模板吗?
答案 0 :(得分:1)
一种简单的方法是将不同的对象传递给模板函数:
modelData =
data: @model.toJSON()
fullName: @get('first') + ' ' + @get('last')
@template(modelData)
然后在模板中:
<span><%= fullName %></span>
<span><%= data.first %></span>
toJSON
通常更多用于序列化,因此您可能不希望将其更改为输出仅显示内容。你也可以像你建议的那样将模型传递给模板。
另一种选择(javascript不是咖啡......):
toDisplayJSON: function(){
var json = this.toJSON();
json.fullName = this.get('first') + ' ' + this.get('last');
return json;
}
我知道我已经阅读了另一种方法(视图模型方法):Dealing with non-saveable values in Backbone