2011-12-28 51 views
3

Backbone.View情況下,可以設置一個events哈希回調:傳遞函數的`events`哈希

events: { 'click #element' : 'myFunction' } 

當我嘗試訪問的功能不是視圖實例的直接功能(例如,this.model.myFunction)我無法在events哈希中傳遞該函數。我曾嘗試:

events: { 'click #element' : 'model.myFunction' } 

events: { 'click #element' : this.model.myFunction } 

我怎麼能告訴使用this.model.myFunction作爲回調從一events哈希我的骨幹看法?

回答

6

不,你不能那樣做。該relevant chunk of Backbone看起來是這樣的:

delegateEvents : function(events) { 
    if (!(events || (events = getValue(this, 'events')))) return; 
    this.undelegateEvents(); 
    for (var key in events) { 
    var method = this[events[key]]; 
    if (!method) throw new Error('Event "' + events[key] + '" does not exist'); 
    //... 

所以在events的值必須在你的視圖對象方法的名稱。您可以自行路由事件:

events: { 'click #element': 'myFunction' }, 
// ... 
myFunction: function(e) { 
    this.model.myFunction(e); 
} 
+1

同意這一點。 OP的問題:在Model中有一個事件處理程序是否真的有意義? – jdigital 2011-12-28 03:21:18

+1

@jdigital:我同意模型中的事件處理函數('myFunction(e)')很奇怪,但視圖中只調用一個模型方法的事件處理函數('this.model.myFunction(e.something) ')如果'myFunction'只是做模型的事情就夠了。 – 2011-12-28 03:24:10

+1

@jdigital:我有觀看'model'的'destroy'事件的視圖。我想從視圖中摧毀'click.remove'模型,事件處理函數爲'this.model.destroy'。 – Randomblue 2011-12-28 03:41:05