为什么不调用我的事件处理程序

时间:2012-10-27 10:00:23

标签: javascript extjs

我正在使用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');
              }

第一种情况我错过了什么?

感谢。

2 个答案:

答案 0 :(得分:1)

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

this.calendarioChange

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

items: [
            {
                xtype: 'datepicker',
                handler: function(picker, date) {
                    var window = this.up('window');
                    window.calendarioChange(picker, date);
                }
            }
...

答案 1 :(得分:0)

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