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

问题描述:

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

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(); - 我想手动触发personchange事件时,其收藏的变化)

预计change事件将具有参数,如event catalog中所述。

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

在你的情况,因为你只是手动触发事件,你将不得不提供这些参数。您看到的错误是来自其他代码尝试访问model.previousAttributes而未定义模型。

TL; DR:

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

,你可能可以省略{}