자바스크립트/Ext JS2013. 9. 17. 20:13

ExtJS MVC구조를 통해 어플리케이션을 개발시 고민 중 하나가 컨트롤러의 등록이다. 

보통에 경우 app.js 즉 Ext.Application을 상속받은 클래스에 사용할 Controller를 등록하게 된다.


그러나 개발 시에는 매번 생성되는 컨트롤러를 app.js에 등록 하기 어렵고? 아니 귀찮고 규모가 큰 시스템에 경우

컨트롤러도 많아 지게 되어 모두 등록한다는 것 자체가 왠지 성능상에 좋지 않을 듯 싶다.


해서 생각한 것이 다이나믹하게 컨트롤러를 그때 그때 등록할수 있는 방법을 사용하게 된다.

대충 기술하자면 한개 정도의 미리 등록된 컨트롤러가 참조하고 있는 뷰를 통해 해당 컨트롤러에 

접근하면서 사용할 컨트롤러의 이름을 전달하고 접근과 동시에 application클래스에 특정 메소드를 호출하여

아래와 같이 새로운 컨트롤러를 등록하도록 하였다.

application안에서 컨트롤러를 등록하는 방법은 

var controller = this.getController('사용할 컨트롤러 클래스명');

controller.init(this); -> 여기서 this는 어플리케이션 클래스 이다.


문제는 이때 발생한다. 개발 모드에서 다이나믹하게 컨트롤러를 등록하여 사용할 수 있는 코드는 구축이 되었지만

실서버에 배포할 요량으로 빌드를 해보니 app.js에 등록되지 않은 컨트롤러는 빌드에서 빠지는 현상이 발생한다.


이는 ExtJS가 클래스의 종속성에 대해 검증하는 과정에서 사용되지 않는 즉 require가 없거나 참조관계 등이 없을 경우

실제 클래스 파일이 존재하는데도 빌드에서는 제외 시킨다는 것이다.


이 경우에는 Sencha Cmd로 생성한 어플리케이션 내의 build.xml파일을 수정하여 언제 사용될지 모르나 이미 존재하는 클래스를

빌드에 포함시키도록 할 수 있다.



어플리케이션 클래스
Ext.application({
    name: 'MyApp',
    appFolder: 'app',

    controllers: [
        "main.App"
    ],

    uses: [
        /*ant-generated-content-start*/ /*ant-generated-content-end*/
    ],

    autoCreateViewport: true,
});
build.xml

    

    

        
        
            
        
        
            
                
                
                    
                    
                        
                        
                    
                
            
        
        

        
        
    

    
        
        
    


참고 : http://stackoverflow.com/questions/14457508/using-sencha-cmd-with-dynamically-loaded-controllers
Posted by 베니94