如何手动触发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();
- 我想手动触发person
的change
事件时,其收藏的变化)
答
预计change
事件将具有参数,如event catalog中所述。
事件应该有(model, options)
作为参数,其中model是模型本身,options是与set
一起使用的选项对象。如果选项是可选的,我无法回想起我的头脑。
在你的情况,因为你只是手动触发事件,你将不得不提供这些参数。您看到的错误是来自其他代码尝试访问model.previousAttributes
而未定义模型。
TL; DR:
person.trigger('change', person, {});
,你可能可以省略{}
。