2013-07-15 61 views
1

我確定對此有一個合理的解釋,但我無法弄清楚 - 有一點指導將非常感謝。事件監聽器回調不會通過正常的函數調用觸發

我有下面的代碼使用主要成分:

var ExampleCollection = Backbone.Collection.extend({ 
    exampleEvent: function() {console.log('event fired')} 
}); 

var ExampleView = Backbone.View.extend({ 
    el:'body', 
    onExampleEvent: function() {console.log('listener heard it')}, 
    initialize: function() { 
     this.listenTo(this.collection,'exampleEvent',this.onExampleEvent); 
    } 
}); 

var testCollection = new ExampleCollection; 
var testView = new ExampleView({collection:testCollection}); 

在控制檯中,當我輸入命令testCollection.trigger('exampleEvent')onExampleEvent回調函數的火災。但是,當我輸入命令testCollection.exampleEvent()時,exampleEvent函數會觸發,但onExampleEvent回調函數不會。

如果有人可以向我解釋爲什麼發生這種情況,我將不勝感激,因爲我一直在尋找一段時間,無法弄清楚。

非常感謝提前。

回答

1

試想一下 - 當你調用

testCollection.exampleEvent() 

你只是執行它,然後什麼都沒有。當

testCollection.trigger('exampleEvent') 

被調用時,它執行函數和每個監聽器。

+0

那麼你是說只有當你通過collection.trigger調用事件時纔會調用監聽器,而不是在任何時候執行事件函數? – Owen

+0

是的。 '.trigger()'的內部調用監聽器。 –