2016-12-08 4 views
1

다른 제품에서 사용하고있는 일반 구성 요소를 만들었습니다. 이제는 여기에 하나의 창과 창 컨트롤러가 있는데이 제품을 사용하기 위해 창 클래스를 재정의했습니다.extJs 컨트롤러 구성 요소를 무시하는 방법

내 일반 창.

Ext.define('App.win.Panel', { 
    extend: 'Ext.window.Window', 
    closeAction:'destroy', 
    maximizable:true, 
    hideToolbar:false, 
    requires: [ 
     'App.MyWinCon.PanelController' 
    ], 
    xtype: 'MyWin', 
    name:'MyWin', 

    controller: 'MyWinCon', 
    layout: { 
     type: 'border' 
    }, 
    gridConfigs:{}, 
    initComponent:function(){ 
     var p=this; 
     p.items = [{ 
     //items 
     }]; 
     p.callParent(arguments); 
    } 
}); 

그리고 내 제품 응용 프로그램에서

나는이 방법처럼 오버라이드 (override) 사용하고 있습니다 : 그 부분에 문제가 없습니다

var Window1 = Ext.create('App.win.Panel', { 
      title: Windo, 
      modal:true, 
      height: '90%', 
      width: '95%', 
      parentGridObj:gridObj, 
     }); 
     Window1.show(); 

. 창이오고있다. 비슷한 열정으로 컨트롤러를 제네릭으로 작성했습니다. 나는 누군가가 제네릭 클래스로 작성 내 응용 프로그램의 방법이 beforeclose 또는 유사한 종류의 액세스하는 방법을 나에게 도움이 될 수 있습니다 지금 당신에게

Ext.define('App.MyWinCon.PanelController', { 
    extend: 'Ext.app.ViewController', 

    alias: 'controller.MyWinCon', 

    init: function(){ 
     var p = this; 
     p.control({ 
     #:{ 
      beforeclose : function(this){ 
      // SOme code 
      } 
     } 
     });  
    } 

코드

의 작은 조각을 보여줍니다. 모든 도움에 감사드립니다.

답변

1

당신은 할 수 없거나 적어도 정말로 복잡합니다.

Ext.define('App.MyWinCon.PanelController', { 
    extend: 'Ext.app.ViewController', 

    alias: 'controller.MyWinCon', 

    init: function(){ 
     var p = this; 
     p.control({ 
     #:{ 
      beforeclose : p.beforeClose // just a reference to function below! 
     } 
     });  
    }, 
    beforeClose: function(component){ // thou ought not use a variable named "this"! 
     // SOme code 
    } 

지금 당신은 당신의보기에서 기능에 액세스 할 수 있습니다 :하지만이 리팩토링의 최소 정말 정말 쉬운 방법입니다 내가 JS가 파일을 분리하기 위해 필요한이 들어

view.getController().beforeClose() 
+0

과 그에 액세스 파일. 사실 저는 하나의 메소드에만 액세스하려고 했으므로 완전한 컨트롤러를 다시 작성해야했습니다. 일반에서 내 제품에 대한 전체 복사 붙여 넣기를 의미합니다. – David