たとえばコンボボックスのselectイベントの場合
// 関数定義 function doSomething(combo, record, index){ // 何か処理 } // イベントハンドラ設定部分 Ext.getCmp('comboID').on('select', doSomething);
そのままだと、引数として以下が渡されます。
combo: Ext.form.ComboBox
コンボボックス
record: Ext.data.Record
ストアから返されたデータレコード
index: Number
ドロップダウンリスト内の選択された項目のインデックス
ハンドラに引数を追加したいとき、関数定義を次のようにしても、そりゃーダメです。
// 間違った関数定義 function doSomething(combo, record, index, addParam){ // 何か処理 }
こういうときはFunctionクラスのcreateCallback、またはcreateDelegateを使います。
上の例だと次のように書けます。
/** * createDelegateを使う */ // 関数定義部分 function doSomething(addParam){ var value = this.getValue(); // 何か処理 } // ハンドラ設定部分 var cmb = Ext.getCmp('comboID'); cmb.on('select', doSomething.createDelegate(cmb, [addParam]));
createCallbackとcreateDelegateの違いは、スコープを渡せるかどうかです。
引数の形式
createCallback(/*args...*/):Function
createDelegate([Object obj], [Array args], [Boolean/Number appendArgs]):Function
ExtJSのAPIリファレンスにはbuttonの例が載っています。
ExtJS 3.0 API Documentation 日本語版
http://extdocs.xenophy.com/