0

我正在使用 ExtJs4.1,这是我的示例。不以这种方式调用“calendarioChange”:

Ext.define('App.view.atendimento.Agenda', {
  extend: 'Ext.window.Window', 
  maximized: true,
  bodyPadding: 4,
  constrain: true,
  layout: 'hbox',
  items:[
    {
        xtype: 'container',
        width: 300,
        layout: 'vbox',
        items: [
            {
                xtype: 'datepicker',
                handler: this.calendarioChange
            }
        ]
    }
  ],
  calendarioChange: function(picker, date){
    alert('changed');
  }
});

但以这种方式有效:

 xtype: 'datepicker',
     handler: function(picker, date){
                   alert('changed');
              }

我在第一种情况下缺少什么?

谢谢。

4

2 回答 2

1

问题是你没有考虑到你的句柄范围。每次嵌套 {} 构造函数时,都会更改“this”指针。在你的情况下:

this.calendarioChange

无法工作,因为 'this' 指向 datepicker 而不是 Window。您可以通过在找到窗口的事件中添加一个函数然后调用适当的方法来解决它:

items: [
            {
                xtype: 'datepicker',
                handler: function(picker, date) {
                    var window = this.up('window');
                    window.calendarioChange(picker, date);
                }
            }
...
于 2012-10-27T10:28:13.513 回答
0

因为您定义为事件处理程序的方法不在this范围内。例如,您可以在Ext.define()调用外部声明该方法,然后仅按名称引用它。

于 2012-10-27T10:17:34.147 回答