2011-07-31 7 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)) 

注意を念頭に置いて、余分なパラメータを渡すことで作成されます。 evt変数を余分にマッサージする必要があるため、JQueryコードのより直接的な変換が可能かどうかはわかりません。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){...} 
関連する問題