如何在Backbone模型上手动触发`change`事件?

时间:2015-09-04 09:04:43

标签: backbone.js

我正在尝试在属于集合的Backbone模型上手动触发change事件。这是一个最小的例子:(JSFiddle

var PersonModel = Backbone.Model.extend({});

var PersonCollection = Backbone.Collection.extend({
    model: PersonModel
});

var person = new PersonModel({ name: 'Spike' });
var people = new PersonCollection([person]);

person.trigger('change'); // throws error
console.log('triggered event successfully');

但是当我触发事件时出现以下错误:(在JSFiddle中,打开Javascipt控制台以查看完整错误)

Uncaught TypeError: Cannot read property 'previousAttributes' of undefined

我该如何解决这个问题?

(我这样做的原因是,在实际代码中,模型有一个集合 - 例如person.things = new ThingCollection(); - 我想在change上手动触发person事件{1}}当其集合发生变化时)

1 个答案:

答案 0 :(得分:4)

change事件应该包含参数,如event catalog中所述。

事件应该有(model, options)作为参数,其中model是模型本身,options是与set一起使用的选项对象。如果选项是可选的,我无法回想起我的头脑。

在您的情况下,由于您只是手动触发事件,因此您必须提供这些参数。您看到的错误来自其他一些试图访问model.previousAttributes并且模型未定义的代码。

TL; DR:

person.trigger('change', person, {});

您可以省略{}