2012-10-11 2 views
0

독립 실행 형 애플리케이션으로 실행할 수있는 여러 모듈/플러그인을 포함하는 모듈러 애플리케이션이 있습니다. 동적으로 모듈/플러그인 컨트롤러를 메인 어플리케이션에 등록하고 여기 단계별로 문제가 있습니다.Extjs 4 - 앱과 같은 플러그인의 네임 스페이스

내 주요 응용 프로그램은 접두사가 - 자사의 컨트롤러 "A.controller.AppController을 내 플러그인은 B 접두사가 있습니다 -의 컨트롤러 :. B.controller.PortalController

플러그인 컨트롤러의 코드 : 전망은 B 접두사 제대로 등록

 

    Ext.define('B.controller.PortalController', { 
     extend: 'Ext.app.Controller', 
     views: [ 
      'portal.MapPanel', 
      'administration.ConfigPanel', 
      'administration.ConfigPanelWrapper' 
     ], 
     //stores:['Test'], 
     init: function() { 
      console.log('portal controller init'); 
      //console.log(this.getTestStore()); 
      this.control({ 

      });  
     } 

    }); 

Ext.Loader는 B.view.portal.MapPanel을로드하지만 저장소가로드되지 않습니다 .을 지정하면 A.store.Test을로드하려고 시도합니다. test.Test을 지정하면 오류는 발생하지만 ext-all-debug가 catch하지 않습니다.) 그리고을 지정하면제대로로드하지만 지금은 getBStoreTestStore()을 사용하여 많은 코드가 변경되는 저장소 참조를 가져와야합니다. 컨트롤러에 적절한 접두사가있는 상점을로드하는 방법?

답변

0

무시하지 않는 것은 불가능하다고 생각합니다. 내 견해에 더할 나위없는 것은 또한 효과가 없어야합니다! 제대로 적절한 접두사 자신의 클래스 명을 사용을 사용하여 수업을 통해

컨트롤러로드 EXT-모든 debug.js의 모든 코드 :

 

    namespace = Ext.Loader.getPrefix(className) || match[1]; 
    namespaceAndModule = namespace + '.' + module + '.' 

그러나 그 컨트롤러으로 getStore에 이름을 전달 게터를 만들어 각 뷰, 저장, 모델의 경우

, 의 getView,을 getModel 기능 게터가 반환 앱 스토어에 전달

 

    if (!this[fn]) { 
        this[fn] = Ext.Function.pass(this['get' + type], [ref], this); 
       } 

으로 getStore 기능 :

 

    getStore: function(name) { 
      return this.application.getStore(name); 
     }, 

,

응용 프로그램 자체는 단지 다른 클래스 이름이 너무 stores:['Test']을 사용하는 응용 프로그램 이름입니다 this.name를 사용하여 구축됩니다 이름을 반환합니다 알려진 접두사와 정규화 된 클래스 이름이있는 경우 클래스 이름을 그래서

 

    getModuleClassName: function(name, module) { 

      if (name.indexOf('.') !== -1 && (Ext.ClassManager.isCreated(name) || Ext.Loader.isAClassNameWithAKnownPrefix(name))) { 
       return name; 
      } else { 
       return this.name + '.' + module + '.' + name; 
      } 
    } 

를 해결하기 위해 getModuleClassName을 사용하는 것입니다 A.store.Test을 가리 킵니다.

오버 라이팅 쓰기에 대해 생각하고 있지만 다른 것들을 망칠 까봐 두렵습니다.