web-dev-qa-db-ja.com

バックボーン変更イベントをコレクション内のモデルの属性にバインドする

以下のようなcollectionを取るビューがあります。

_MyView = Backbone.View.extend({
    initialize: function() {
       this.collection.on("change://an attribute of a model in aCollectionToRender", someAction);
    }
});

var MyViewInstance = new MyView({
    collection: aCollectionToRender
});
_

基本的に、MyViewがコレクション全体の変更をリッスンするのではなく、コレクションに含まれるモデルの1つの属性のみをリッスンします。

これにはいくつかの選択肢があることに気づきました。

  1. aCollectionToRenderのモデルごとにビューを作成し、それらのビューに.on("change")イベントを添付します。私の状況では正しくないので、これはしたくありません
  2. this.collection.on("change")イベントを作成し、要件に基づいてイベントハンドラーフィルターを作成するだけです。これはあまりエレガントではなく、Backboneで上記のようにイベントフィルターを作成できる場合、これは重複コードです。

すでにフィルタリングを行っているイベントリスナーを作成する方法があるかどうか疑問に思っていました。この質問も重複している可能性があります。見ましたが、このようなものは見つかりませんでしたが、バックボーンの質問がたくさんあります

8
Jay

多分私はあなたの質問を誤解しています、しかしあなたはあなたが示すことを正確に行うことができます。 バックボーンドキュメント を確認してください。

MyView = Backbone.View.extend({
    initialize: function() {
       this.collection.on("change:attributeName", this.someAction /*function to call*/, this);
    },
    someAction: function(model, value, options){
    }
});
18
Paul Hoenecke