Ext.Button处理程序配置选项

时间:2011-03-03 15:00:59

标签: javascript extjs

    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声明处理程序始终与点击有关时,您甚至必须指定'click'?这些附加信息不是不必要的吗?

4 个答案:

答案 0 :(得分:1)

通常你会这样设置它。没有真正需要传递参数,因为someFunction是你的“类”的成员,并且可以访问你想要的任何数据。

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

someFunction: function() {
   // do something interesting.
}

答案 1 :(得分:1)

所以,如果我理解正确你想设置处理程序配置选项但是自己设置参数吗?

这样做你想要的吗?

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

注意在匿名函数上执行的createCallback,这会为handler创建一个回调函数,该函数只传递给您传递给createCallback的参数。

答案 2 :(得分:1)

我发现这样做的另一种方法是传递自定义配置选项和按钮。假设您想要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 
      }
}

答案 3 :(得分:0)

您还可以创建一个回调函数,在调用它时插入额外的参数:

var button = new Ext.Button({
    handler: this.someFunction.createDelegate(button,['Some message'])
});