[英]Passing an event to a collection in backbone
我试图通过触发应用程序中其他位置的事件来触发集合上的行为。 我对骨干网还很陌生,所以可能我的语法都错了,但这似乎应该可行
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');
能做到吗? 我要去哪里错了?
您触发的事件必须在模型中捕获。
如果要捕获集合中的事件,可以使用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');
UPDATE
集合具有一个初始化方法 ,可用于注册事件。 稍后,您可以从其实例触发这些事件。
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');
如果要使用testEvent
事件调用集合的特定方法,则也可以采用此路径。 工作演示
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');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.