Параметр конфигурации обработчика Ext.Button - PullRequest
0 голосов
/ 03 марта 2011
    someClass = Ext.extend(someClassB, {
        _someFunctionC{  
           someButton = new Ext.button({  
              handler: function () {
                            this._onClick('click');
                       }
           }),
           _onClick(someMessage){
               Ext.Msg.alert(someMessage);
            }
        }
    }

_onClick съедает один параметр;в приведенном выше коде вы добавляете событие click, потому что хотите, чтобы _onClick выполнялось после того, как пользователь нажимает кнопку.Однако как указать эту конкретную регистрацию «щелчка» И передать локальную переменную в качестве параметра _onClick в то же время?

Кроме того, зачем вам даже указывать «щелчок», когдаAPI утверждает, что обработчик всегда относится к клику?Не нужна ли эта дополнительная информация?

Ответы [ 4 ]

1 голос
/ 28 июля 2011

Другой способ, который я нашел для этого, - передать пользовательский параметр конфигурации вместе с вашей кнопкой. Скажем, вы хотели иметь splitbutton, который мог бы выбрать количество добавляемых баннеров. (это из недавнего проекта)

{
xtype: 'splitbutton',
iconCls: 'icon addBanners',
ref: '../addBanner',
text: 'Add Banner',
menu: new Ext.menu.Menu({
    items: [{ 
        text: 'Add 10 Banners',
        scope: this,
        handler: this.addBanner,
        numBanners: 10
    },{
        text: 'Add 20 Banners',
        scope: this, 
        handler: this.addBanner,
        numBanners: 20
    }]
}),                    
scope: this,
handler: this.addBanner,
numBanners: 1
}

А в твоей функции:

addBanner: function(button, event) {
      if (button.numBanners) {
          // do whatever 
      }
}
1 голос
/ 04 марта 2011

Так что, если я правильно понимаю, вы хотите установить опцию конфигурации обработчика, но сами установить аргументы за один раз?

Делает ли это то, что вы хотите?

// clicking the button alerts 'Hello World'
new Ext.Button({
    text: 'Test',
    handler: function(value){
        alert('Hello, ' + value);
    }.createCallback('World')
});

Обратите внимание на createCallback, выполняемый для анонимной функции, это создает функцию обратного вызова для handler, которая получает только те аргументы, которые вы передаете createCallback.

1 голос
/ 03 марта 2011

Обычно вы настраиваете это так.Нет необходимости передавать параметры, так как someFunction является членом вашего класса и имеет доступ к любым данным, которые вы захотите.

var button = new Ext.Button({
    handler: this.someFunction
    scope: this
});

someFunction: function() {
   // do something interesting.
}
0 голосов
/ 06 марта 2011

Вы также можете создать функцию обратного вызова, которая вставляет дополнительные параметры при вызове:

var button = new Ext.Button({
    handler: this.someFunction.createDelegate(button,['Some message'])
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...