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

「これ」がウィンドウではなく日付ピッカーを指しているため、機能しません。ウィンドウを見つけて適切なメソッドを呼び出すイベントに関数を追加することで解決できます。

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 に答える