2014-02-13 43 views
3

閱讀Backbone教程,看起來add事件是從collection中觸發的,添加的項目與事件一起發送(remove也一樣)。我在backbonejs.org網站上找不到有關此功能的任何文檔,並且很好奇,是否有方法可以將我的自定義events與對象一起發送。其次,這在木偶中是可能的嗎?事件中的骨幹傳遞對象

回答

4

Backbone定義的每個對象在Backbone.Events中混合,這意味着您可以使用object.trigger觸發事件。它被定義爲

觸發 object.trigger(事件,[*參數])
觸發回調對於給定的事件,或事件的空間分隔的列表。後續的參數 觸發將傳遞給事件回調。

你只需傳遞額外的參數讓它們在你的回調中。

例如,

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/

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

您也可以使用​​[R從Marionette.js

事件聚合實現。它從Backbone.Events擴展到在對象中提供核心事件處理代碼,該對象本身可以根據需要進行擴展和實例化。

var vent = new Backbone.Wreqr.EventAggregator(); 

vent.on("foo", function(){ 
    console.log("foo event"); 
}); 

vent.trigger("foo");