3

我在主干中创建了两个集合,我想将第一个集合绑定到来自第二个集合的模型更改事件。

    var ProjectUserList = Backbone.Collection.extend({

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

    });

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

第二个集合与第一个绑定更改事件:

    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" (model, options) — 当模型的属性发生变化时。

所以"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"将是一个 wrapping { id: 4, ... }

演示:http: //jsfiddle.net/ambiguous/aE2XE/

于 2012-12-08T17:48:34.527 回答
1

我应该看起来更努力一点。

上例中 updateShare 函数上下文中的对象“this”包含一个数组“models”,其中包含集合中的所有模型,但触发更改事件的对象具有“_changeing:true”属性。

但接受的答案是我一直在寻找但在文档中找不到的答案。

于 2012-12-08T16:44:57.300 回答