将多个属性更改绑定到Backbone.js模型的正确方法

Correct way of binding multiple attribute changes to a Backbone.js model

本文关键字:模型 js 方法 Backbone 属性 绑定      更新时间:2023-09-26

我有以下代码,其中我将更改绑定到单个属性"attribute_1"。

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

如何绑定两个属性?这行不通:

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

从Backbone.js 0.9.0开始,bind()函数(已重命名为on())支持以空格分隔的事件列表:

model.on("change:title change:author", ...)
// equivalent to
model.bind("change:title change:author", ...)

我不知道是否存在这样一个"bulk-bind"函数(你可以为它打开一个功能请求,它似乎很有用)。

你可以分别绑定它们:

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);
  }
});