我试图通过在我的应用中的其他位置触发事件来触发集合上的行为。我对骨干很新,所以可能我的所有语法都错了,但这似乎应该可行
var Test = Backbone.Model.extend({
});
var Tests = Backbone.Collection.extend({
model: Test,
events: {
"testEvent":"testResponce"
},
testResponce: function(){
alert('hello world');
}
});
var myTest = new Test();
myTest.trigger('testEvent');
可以这样做吗?我哪里错了?
答案 0 :(得分:1)
您正在触发的事件必须被捕获到模型中。
如果您想在集合中捕获事件,可以使用 Backbone.on 和 Backbone.trigger 或 collection.on 和 collection.trigger 强>
请查看以下小提琴中的示例
var Test = Backbone.Model.extend({});
var Tests = Backbone.Collection.extend({
model: Test,
initialize: function () {
Backbone.on('testEvent', function () {
alert('event handled in collection');
});
}
});
var myCollection = new Tests();
var myTest = new Test();
Backbone.trigger('testEvent');
<强>更新强>
集合有一个initialize method,您可以使用它来注册事件。稍后您可以从他们的实例触发这些事件。
建议NULL建议的其他方式如下所示。
var Test = Backbone.Model.extend({});
var Tests = Backbone.Collection.extend({
model: Test,
initialize: function () {
this.on('testEvent', function () {
alert('event handled in collection');
});
}
});
var myCollection = new Tests();
var myTest = new Test();
myCollection.trigger('testEvent');
答案 1 :(得分:1)
如果您想使用testEvent
事件调用集合的特定方法,那么您也可以采用此路径。 Working Demo
var Test = Backbone.Model.extend({
initialize: function() {
this.on('testEvent', function() {
console.log(this.collection);
this.collection.testResponce();
});
}
});
var Tests = Backbone.Collection.extend({
model: Test,
testResponce: function(){
alert('hello world');
}
});
var myTest = new Test();
var testList = new Tests([myTest]);
myTest.trigger('testEvent');