2011-07-31 128 views
6

剛剛開始使用Dojo。我想將一些自定義參數傳遞給事件處理程序。在jQuery中,你可以做這樣的:Dojo:如何將自定義參數傳遞給事件處理程序

$('#button').click({ 
    customData: 'foo' 
}, handlerFunction); 

而且customData可以從handlerFunction這樣訪問:

function handlerFunction(event) { 
    console.log(event.data.customData); 
} 

我遷移一點jQuery代碼到道場。我如何將這些參數傳遞給Dojo事件處理程序?

回答

12

好,generaly,關閉允許您通過「隱藏」參數的函數:在道場連接的事件時

function make_event_handler(customData){ 
    return function(evt){ 
     //customData can be used here 
     //just like any other normal variable 
     console.log(customData); 
    } 
} 

所以:

dojo.connect(node, 'onclick', make_event_handler(17)); 

,我想了很多的另一種可能正在使用dojo.partial/dojo.hitch爲您創建閉包。

function event_handler(customData, evt){ 
    /// 
} 

dojo.connect(node, 'onclick', dojo.partial(event_handler, 17)) 

注意,所有這些這些必需的事件處理與傳遞額外的參數(S)記創建。我不知道你是否可以更直接地翻譯JQuery代碼,因爲這需要對evt變量進行額外的處理,我不認爲dojo會這樣做。

+1

啊哈,'dojo.partial'正是我要找的。謝謝! – Jonah

1

另外:

this.connect(other, "onClick", function(e) { 
    /* other is accesible here still */ 
}); 

或:

this.connect(other, "onClick", dojo.hitch(this, "handler", other); 

和事件處理程序:

this.handler = function(other, evt){...} 
相關問題