2009-03-27 7 views
5

मैं ExtJS ढांचे का उपयोग कर रहा हूँ और मैं निम्नलिखित हैंडलर कि एक बटन के लिए एक हैंडलर के रूप में पूरी तरह से प्रयोग किया जाता है है:मैं एक्स्टजेस हैंडलर में अतिरिक्त पैरामीटर कैसे जोड़ूं?

var myButtonHandler = function(button, event){ 
    //code goes here 
}; 

मेरे बटन परिभाषा इस तरह दिखता है:

var myButton = new Ext.Button({ 
     id : 'myButton', 
     renderTo : 'mybutton', 
     text : 'Save', 
     handler : myButtonHandler, 
     scope : this 
    }); 

आप देख सकते हैं , हैंडलर अपेक्षित "बटन" और "घटना" प्राप्त करता है। हालांकि, मैं अपने हैंडलर में कुछ अतिरिक्त जानकारी पास करना चाहता हूं। मुझे यह कैसे करना है?

उत्तर

7

मैं वास्तव में Exts createDelegate प्रोटोटाइप का प्रयोग करेंगे।

var appendBooleanOrInsertionIndex = 0; // Inserts the variables into the front of the function. 
    appendBooleanOrInsertionIndex = true; // Appends the variables to the end of the arguments 

var myButton = new Ext.Button({ 
    id : 'myButton', 
    renderTo : 'mybutton', 
    text : 'Save', 
    handler : myButtonHandler.createDelegate(this, [param1, param2], appendBooleanOrInsertionIndex), 
    scope : this 
}); 
+1

यह सेब की तुलना में एक अधिक सुरुचिपूर्ण जवाब है। एक रैपर बनाने का काम createDelegate द्वारा छिपा हुआ है। वैकल्पिक रूप से, उपयोगकर्ता बटन पर एक कस्टम प्रॉपर्टी जोड़ सकता है और हैंडलर से निरीक्षण कर सकता है। मैं अभी भी createDelegate बनाना पसंद करते हैं। –

+0

तो, आप अपने [पैराम्स] का उपयोग करने के लिए ** myButtonHandler ** फ़ंक्शन के अंदर इसे कैसे संभालेंगे? बस MyButtonHandler ([पैराम्स])? – dmackerman

+0

मैं आगे बढ़ गया और यह दिखाने के लिए उदाहरण को संशोधित किया कि आप createDelegate के साथ क्या कर सकते हैं। इसके अलावा Ext4 और SenchaTouch createDelegate को फ़ंक्शन प्रोटोटाइप से बाहर ले जाया गया है और अब केवल Ext.createDelegate (functionToDelegate, scope, args, appendOrInsertIndex) द्वारा उपलब्ध है – Ballsacian1

3

मैं यह है कि आप पास करना चाहते हैं क्या है पता नहीं है, लेकिन एक आवरण का उपयोग कर मदद कर सकता है:

var myButtonHandler = function (button, event, additionalData){ 
    //code goes here 
}; 

var myButton = new Ext.Button({ 
    id : 'myButton', 
    renderTo : 'mybutton', 
    text : 'Save', 
    handler : handlerWrapper, 
    scope : this 
}); 

var handlerWrapper = function (button, event){ 
    // Fetch additional data 
    var additionalData = "whatever"; 
    myButtonHandler(button, event, additionalData); 
}; 
+0

मेरा अनुमान है कि "var handlerWrapper()" "समारोह handlerWrapper()" होना चाहिए। हाँ? – Huuuze

+0

हाँ, क्षमा करें ... अब ठीक किया गया है। धन्यवाद। – Seb

4

Ext जे एस 4 में:

Ext.bind(myButtonHandler, this, [params array], true); 
+0

+1 यह एक्स्टजेस 4+ के लिए वास्तव में एक अच्छा 1 लाइन समाधान है। – BenSwayne

+0

यह एक्स्टजेस 3.4 (Ext.createDelegate का उपयोग) के लिए भी सच है – lcguida

5

आप एक अच्छा समाधान के रूप में उपयोग कर सकते हैं ब्राडली सुझाव दिया है। यहाँ एक उदाहरण है। जहां दोहराना स्टोर - यह अतिरिक्त पैरामीटर है जिसे मैं एक बटन हैंडलर को पास करना चाहता हूं।

Ext.create('Ext.panel.Panel', { 
    name: 'panelBtn', 
    layout: 'hbox', 
    border: 0, 
    items:[ 
     {xtype: 'button', text: 'Add', name:'addBtn', 
     handler : Ext.bind(this.addBtnHandler, this, repeatsStore, true) 
     } 
    ] 
}); 

और आपके हैंडलर में तीन पैरामीटर होना चाहिए - पहले दो मानक हैं, और अंतिम आपका है।

addBtnHandler:function(button, event, repeatsStore) 
{ 
} 
संबंधित मुद्दे