Как добавить дополнительные параметры в обработчик ExtJS? - PullRequest
6 голосов
/ 27 марта 2009

Я использую среду ExtJS, и у меня есть следующий обработчик, который используется исключительно как обработчик для кнопки:

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

Мое определение кнопки выглядит так:

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

Как видите, обработчик получает ожидаемые "кнопку" и "событие". Тем не менее, я хотел бы передать некоторую дополнительную информацию в мой обработчик. Как бы я это сделал?

Ответы [ 4 ]

9 голосов
/ 25 мая 2009

Я бы на самом деле использовал прототип 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
});
5 голосов
/ 15 февраля 2012

Вы можете использовать хорошее решение, как предложил Брэдли. Вот пример. Где repeatatsStore - это дополнительный параметр, который я хочу передать обработчику кнопки.

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)
{
}
4 голосов
/ 12 мая 2011

In Ext JS 4:

Ext.bind(myButtonHandler, this, [params array], true);
3 голосов
/ 27 марта 2009

Я не знаю, что вы хотите передать, но использование обертки может помочь:

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);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...