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!');
    });
  }
});
22

2 答え

Backbone.js 0.9.0以降、 bind()関数( on() に名前を変更しました)は、スペース区切りのイベントリストをサポートしています:

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

// equivalent to

model.bind("change:title change:author", ...)
79
追加された
@backdeskこれは同じ model.listenTo(モデル、 "change:title change:author"、...)
追加された 著者 Vic,
これで、コールバックが変更ごとに1回または複数回呼び出されますか?
追加された 著者 Sukima,
これはlistenTo構文にどのようにマップされますか?
追加された 著者 backdesk,
@Sukima変更された属性ごとに1回呼び出します。タイトルが変更された場合は、一度発生します。作成者が変更された場合は、一度発生します。タイトルと著者の両方が変更された場合は、タイトルの場合は1回、著者の場合は1回。
追加された 著者 Thaddeus Albers,

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

それらを別々にバインドすることができます:

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
追加された
また、 this.bind(...)。bind(...)のように、 bind()は連鎖可能です。
追加された 著者 Crescent Fresh,
共通のリスナーを使用している場合は、どの属性が変更されたかをどのように確認しますか?
追加された 著者 Daniel Hershcovich,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript