阅读Backbone的教程,似乎从add
触发collection
事件时,添加的项目与事件一起发送(同样适用于remove
) 。我在backbonejs.org网站上找不到有关此功能的任何文档,并且好奇我是否可以通过自定义events
发送对象。其次,在木偶中是否可以这样?
答案 0 :(得分:4)
Backbone定义的每个对象混合在Backbone.Events
中,这意味着您可以使用object.trigger
触发事件。它被定义为
触发器 object.trigger(event,[* args])
触发给定事件或空格分隔的事件列表的回调。随后的论点 触发器将被传递给事件回调。
您只需传递其他参数即可在回调中获取它们。
例如,
var m = new Backbone.Model();
m.on('custom', function(more) {
console.log(more);
});
m.trigger('custom', 'more info');
将记录more info
请参阅http://jsfiddle.net/nikoshr/HpwXe/了解演示
您将触发一个引用该对象的事件来模拟主干的行为:
var m = new Backbone.Model();
m.on('custom', function(model, more) {
console.log(arguments);
});
m.trigger('custom', m, 'more info');
http://jsfiddle.net/nikoshr/HpwXe/1/
在派生模型中:
var M = Backbone.Model.extend({
custom: function() {
this.trigger('custom', this);
}
});
var m = new M();
m.on('custom', function(model, more) {
console.log(model);
});
m.custom();
答案 1 :(得分:0)
是的,您当然可以使用Backbone.Event
var collection = Backbone.Collection.extend();
collection = new collection();
collection.on("message", function(message){
console.log(message);
});
var model = new Backbone.Model();
collection.add(model);
model.trigger("message", "This is message");
关于您可以看到哪些类型的活动documentation。
这是demo
您也可以使用Marionette.js的Event Aggregato r
事件聚合器实现。它从Backbone.Events扩展,在一个对象中提供核心事件处理代码,该对象本身可以根据需要进行扩展和实例化。
var vent = new Backbone.Wreqr.EventAggregator();
vent.on("foo", function(){
console.log("foo event");
});
vent.trigger("foo");