web-dev-qa-db-ja.com

複数の属性の変更をBackbone.jsモデルにバインドする正しい方法

次のコードがあり、変更を単一の属性「attribute_1」にバインドします。

var Mine = Backbone.Model.extend({
  initialize: function() {
    this.bind("change:attribute_1", function() {
      console.log('changed!');
    });
  }
});

2つの属性をバインドするにはどうすればよいですか?これは機能しません:

var Mine = Backbone.Model.extend({
  initialize: function() {
    this.bind("change:attribute_1, change:attribute_2", function() {
      console.log('changed!');
    });
  }
});

これもしません:

var Mine = Backbone.Model.extend({
  initialize: function() {
    this.bind("change:attribute_1 change:attribute_2", function() {
      console.log('changed!');
    });
  }
});
23
ericbae

そのような「バルクバインド」機能が存在するかどうかはわかりません(機能リクエストを開くことができます。便利なようです)。

それらを個別にバインドできます。

var Mine = Backbone.Model.extend({
  initialize: function() {
    var listener = function() { console.log('changed'); };
    this.bind("change:attribute_1", listener);
    this.bind("change:attribute_2", listener);
  }
});

または、すべての変更をリッスンする(そしてリスナーでフィルターする)ことができます。

var Mine = Backbone.Model.extend({
  initialize: function() {
    var listener = function() { console.log('changed'); };
    this.bind("change", listener);
  }
});
24
Thilo

Backbone.js 0.9.0以降、bind()関数( on() に名前が変更されました)は、スペースで区切られたイベントのリストをサポートします。

model.on("change:title change:author", ...)

// equivalent to

model.bind("change:title change:author", ...)
80
Rob Hruska