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>

fullNameほとんどの例では、モデルはテンプレートに渡す前に常にJSONに変換されることがわかります。したがって、この属性を含めるようにtoJSONメソッドを設定する方法はありますか?または、代わりにモデルをテンプレートに渡す必要がありますか?

4

1 に答える 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;
}

これを行う別の方法(ビューモデルアプローチ)を読んだことは知っていました:バックボーンで保存できない値を処理する

于 2013-03-04T21:15:37.587 に答える