2012-10-27 2 views
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'); 
    } 
}); 

하지만 thsi 방법으로

작동 :

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

무엇 미안 첫 번째 경우에서 누락?

감사합니다.

답변

0

이벤트 처리기로 정의한 메서드가 this 범위에 없기 때문에. 예를 들어 Ext.define() 호출 외부에서 메서드를 선언 한 다음 이름으로 참조 할 수 있습니다.

+0

나는이 기능을 사용할 수 없습니다. – Beetlejuice

1

문제는 사용자가 처리 범위를 고려하지 않은 것입니다. {} 생성자를 중첩 할 때마다 'this'포인터를 변경합니다. 귀하의 경우 :

this.calendarioChange 

'this'가 창이 아닌 datepicker를 가리키기 때문에 작동하지 않습니다. 창을 찾은 다음 적절한 방법을 호출하는 함수를 추가하여 해결할 수 있습니다.

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

이 작동하지만 너무 자세하게 보입니다. – Beetlejuice

+0

예. 그렇지만 더 큰 응용 프로그램을 위해 선호되는 솔루션은 아닙니다. Sencha MVC를 사용하면 더 우아 할 수 있습니다. 왜냐하면 그 동작은 컨트롤러에서 구현 될 것이기 때문에이 경우에는 중첩 된 객체가 아닙니다. – Israel

관련 문제