Backbone.js和CoffeeScript:如何创建可以呈现的属性函数

时间:2013-03-04 21:04:59

标签: backbone.js

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

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

1 个答案:

答案 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