3

バックボーンに2つのコレクションを作成しましたが、最初のコレクションを2番目のコレクションのモデル変更イベントにバインドしたいと思います。

    var ProjectUserList = Backbone.Collection.extend({

        model: app.projectUser,
        url: config.base + 'api/project/project_users'

    });

    //instantiate
    app.projectUserList = new ProjectUserList();

最初からバインドされた変更イベントを含む2番目のコレクション:

    var FileList = Backbone.Collection.extend({

        initialize: function () {
            app.projectUserList.on('change', this.updateShare);
        },

        updateShare: function () {
            console.log(this);
        }
    });

コレクション内でどのモデルが変更されたかを知るにはどうすればよいですか?

4

2 に答える 2

4

細かいマニュアルから:

イベントのカタログ

これは、Backbone.jsが起動できるすべての組み込みイベントのリストです。必要に応じて、モデルとビューで独自のイベントを自由にトリガーすることもできます。

  • [...]
  • 「変更」(モデル、オプション)—モデルの属性が変更されたとき。

"change"したがって、イベントハンドラーの最初の引数は、最初にイベントをトリガーしたモデルになります。

たとえば、次のような単純な設定があるとします。

var M = Backbone.Model.extend({});
var C = Backbone.Collection.extend({
    model: M
});
var c = new C([
    { id: 1, s: 'where' },
    { id: 2, s: 'is' },
    { id: 3, s: 'pancakes' },
    { id: 4, s: 'house' }
]);
c.on('change', function(model, options) { /*...*/ });
c.at(​​​​​​​​​​​​​​​​​3).set('s', 'house?');​​​​​​​​​​

ハンドラーのmodel引数は、"change"をラップするものになります{ id: 4, ... }

デモ: http: //jsfiddle.net/ambiguous/aE2XE/

于 2012-12-08T17:48:34.527 に答える
1

もう少し見づらかったはずです。

上記の例のupdateShare関数のコンテキスト内のオブジェクト「this」には、コレクション内のすべてのモデルを含む配列「models」が含まれていますが、変更イベントが発生したオブジェクトには「_changing:true」のプロパティがあります。

しかし、受け入れられた答えは、私が探していたものであり、ドキュメントでは見つかりませんでした。

于 2012-12-08T16:44:57.300 に答える