كيف يمكنني إضافة معلمات إضافية إلى معالج ExtJS؟

StackOverflow https://stackoverflow.com/questions/690343

  •  22-08-2019
  •  | 
  •  

سؤال

وأنا باستخدام إطار ExtJS ولدي معالج التالية التي يتم استخدامها فقط للمعالج زر:

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

وتعريف زر بلدي يبدو مثل هذا:

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

وكما ترون، يتلقى المعالج على زر "" المتوقع و "الحدث". ومع ذلك، أود أن تمرير بعض المعلومات الإضافية في بلدي المعالج. كيف أفعل ذلك؟

هل كانت مفيدة؟

المحلول

وأود أن فعلا استخدام 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
});

نصائح أخرى

في تحويلة JS 4:

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

ويمكنك استخدام حلا جيدا كما اقترح برادلي. هنا مثال. حيث repeatsStore - هو المعلمة الإضافية التي أريد أن يمر إلى معالج زر

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)
{
}

وأنا لا أعرف ما الذي تريد أن يمر، ولكن يمكن استخدام المجمع مساعدة:

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);
};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top