1

在我遇到的任何示例中,我都没有看到这种类型的东西。我需要创建一个依赖于其他属性的属性函数。例如:

# 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属性?或者我应该将模型传递给模板吗?

4

1 回答 1

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

于 2013-03-04T21:15:37.587 回答