Backbone传递对象与事件

时间:2014-02-13 16:41:09

标签: events backbone.js marionette backbone-events

阅读Backbone的教程,似乎从add触发collection事件时,添加的项目与事件一起发送(同样适用于remove) 。我在backbonejs.org网站上找不到有关此功能的任何文档,并且好奇我是否可以通过自定义events发送对象。其次,在木偶中是否可以这样?

2 个答案:

答案 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();

http://jsfiddle.net/nikoshr/HpwXe/2/

答案 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");