Javascript 将事件传递给主干中的集合
我试图通过在我的应用程序的其他地方触发事件来触发集合的行为。我对主干网还很陌生,所以可能我所有的语法都错了,但这似乎应该是可行的Javascript 将事件传递给主干中的集合,javascript,backbone.js,Javascript,Backbone.js,我试图通过在我的应用程序的其他地方触发事件来触发集合的行为。我对主干网还很陌生,所以可能我所有的语法都错了,但这似乎应该是可行的 这能做到吗?我哪里出错了?您触发的事件必须在模型内部捕获 如果要捕获集合内的事件,可以使用主干.on和主干.trigger或集合.on和集合.trigger 请查看下面的提琴以了解示例 更新 集合具有可用于在其上注册事件的。稍后,您可以从它们的实例触发这些事件 建议的另一种方法是如下所示 var Test = Backbone.Model.extend({});
这能做到吗?我哪里出错了?您触发的事件必须在模型内部捕获 如果要捕获集合内的事件,可以使用主干.on和主干.trigger或集合.on和集合.trigger 请查看下面的提琴以了解示例 更新 集合具有可用于在其上注册事件的。稍后,您可以从它们的实例触发这些事件 建议的另一种方法是如下所示
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
事件调用集合的特定方法,则也可以使用此路径
我不建议通过全局名称空间来路由事件。使用
this.on
和this.trigger
来引用Backbone.Collection的一个实例。这确实回答了这个问题,因此是一个有价值的勾号接收者。然而,向前看,我实际上打算从事件实例化一个模型,所以这将创建一个循环?!我想我可以创建两个模型类,一个用于触发,一个用于实际数据存储,但是,当我真正想要的只是触发器方法并且不污染全局名称空间时,拥有一个完整的主干模型,这让我觉得太过分了。如果您想在testEvent
事件的触发器上创建另一个模型,那么您可以轻松地在testResponse
方法中创建一个新模型,并将其添加到您的集合中。根本没有循环。可能有一个用例,在此基础上,你已经提出了这个问题,所以请让我知道它是如何涉及循环的。啊,我明白了,对不起,误解了代码。但是会有重复的事件绑定,不会吗?@MildFuzz不会有重复的事件绑定。每个模型都在侦听一个事件testEvent
,该事件在模型本身上被触发。在事件处理程序中,由您决定要做什么。在本例中,我们调用的是一种完全正确的收集方法。在本例中,我们定义了一个匿名方法作为事件处理程序testresponse
只是另一个方法,不是事件处理程序,而是从匿名事件处理程序调用的。也许你可以向我解释一下你是如何看到重复的事件绑定的,这样我才能更好地回答你的问题。在这个提琴中,模型上没有绑定,但是集合上有绑定,这是你想要的。已经有一个集合对象与每个模型关联,我们只是在集合上触发一个事件。现在只有一个事件绑定,它仅在集合上。模型上没有绑定。
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');
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');
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');