8

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 で既にイベント フィルターを記述できる場合、これは重複したコードです。

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

4

1 に答える 1

18

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

MyView = Backbone.View.extend({
    initialize: function() {
       this.collection.on("change:attributeName", this.someAction /*function to call*/, this);
    },
    someAction: function(model, value, options){
    }
});
于 2013-02-05T20:41:53.440 に答える