2011-11-18 5 views
1

일반적으로 ExtJS 구성 요소/객체는 구성 객체를 생성자에 전달하여 구성됩니다.JavaScript 객체 생성

this.serviceFiltersPanel = new Ext.FormPanel({ 
     title: 'some title', 
     layout:'anchor', 
     buttonAlign: 'left', 
     buttons: [ 
      { 
       xtype: 'button', 
       text: 'Click Me', 
       handler: function() { 

        // How do I get a reference to the FormPanel 
        // under construction here? 
       }); 
      } 
     ] 
    }); 

단추 처리기 내부에서 구성되는 FormPanel 개체에 대한 참조를 얻을 수있는 방법이 있습니까?

답변

2
var formPanel = new Ext.FormPanel({ 
    title: 'some title', 
    layout:'anchor', 
    buttonAlign: 'left', 
    buttons: [ 
     { 
      xtype: 'button', 
      text: 'Click Me', 
      handler: function() { 

       // Q: How do I get a reference to the FormPanel 
       // under construction here? 

       // A: use the formPanel variable. 
      }); 
     } 
    ] 
}); 

this.serviceFiltersPanel = formPanel; 
+0

'formPanel'은 생성자가 실행을 완료 한 후에 만 ​​할당된다고 가정합니다. FormPanel을 두 개의 변수에 할당하는 것이 왜 필요한지 설명 할 수 있습니까? 다른 말로하면, 왜 질문에'serviceFiltersPanel'에 그것을 할당 할 수없고, 그 핸들러 내에서 그 변수를 참조 할 수없는 이유는 무엇입니까? –

+0

@Don은 전역 변수이기 때문에 거기에서만 사용할 수 있습니다. 그리고 당신은 정확 합니다만, 어쨌든 건설 후에는 핸들러가 호출되고 변수는 전역에 존재하므로이를 읽을 수 있습니다. – Esailija

+0

@Don, 생성자는 버튼 핸들러가 실행되기 전에 실행 방법을 완료합니다. 당신은 (실행되지 않은) 버튼 핸들러를 생성자에 전달합니다. 왜 내가 별도의 변수에 저장하고 있는지에 관해서는, 이것은'this'라는 핸들러가 뭔가 다른 것을 참조 할 것이기 때문에'this.serviceFiltersPanel'을 사용하면 작동하지 않을 것이기 때문입니다. – Domenic

0

을 수행하는 일반적인 방법은 바인딩 내부 생성자를 사용하는 것입니다 만의 ExtJS 에서 나는 here에서 읽을 때이 작업을 수행하는 여러 가지 방법이있을 것 같다. 빠른 일반 JS로

은 당신이 할 수있는 해킹하지만 매우 DRY 아니다 :

this.serviceFiltersPanel = new Ext.FormPanel({ 
    title: 'some title', 
    layout:'anchor', 
    buttonAlign: 'left', 
    buttons: [ 
     { 

     xtype: 'button', 

     text: 'Click Me', 

     handler: (function(obj) { 

       return function(){ 
       //obj.serviceFiltersPanel refers to the FormPanel instance created. This is the real function body, 
       //the outer function is immediately executed. 
       }; 

      })(this) 
     } 
    ] 
}); 
0

이 작업을 수행 할 가능성이 수십 가지가 있습니다 - 여기에 또 다른 (내선 JS 3.x의)입니다.