EXTJS4如何使用單個app程序來進行大型軟件開發

大型軟件模塊衆多,extjs4提供的MVC的設計模式可以叫程序員的設計更清晰.
但是問題來了,因爲就一個app,那麼他加載的時候會把所有controller加載進來,那麼controller
會把用到的mode和view全加載進來,這樣一來程序在初始化的時候就會加載整個系統的js文件
系統一旦規模變大必然會導致運行速度降低,系統使用臃腫.加載時間長等一系列問題.
例如:
Ext.application({
        launch: function() {//當前頁面已經完全載入調用
           .........
        },
        controllers: [
            'Users',
            'ROLE'
            'DD'
            'JX'
            'JMS'
            等等........
        ]
    });
那麼如何做到用單個app來完成分佈式加載呢?
先來看看MVC的原理:
在ExtJs4.0核心包中關於app就2個文件

controller是application的一部分,初始化application的時候連帶這會把相應的controller初始化.
然後controller再連帶初始化view和mode,store
那我們的思路就從這裏開始,我們的想法是如果我們開始的時候就加載一個controller(也就是一套功能)
而這套功能的目的就是用來初始化別的controller把其動態加載到這個唯一的app中不就是ok了嗎?
問題:如何才能把外面的controller加載到已經初始化好了的app中呢?
查看controller源碼我發現他有一個屬性可以通過controller找到他所在的app

在初始化事件的方法中源碼調用了this.application 那麼說我們可以通過controller找到他對用的application
我們再看看application的源碼發現application中的controller是一個集合並且getController: function(name) 
這個方法寫的很微妙

不僅僅完成了通過名字返回controller的功能還完成了信controller穿件的功能,(這個有點想我們pcat教程中用的工廠和緩存)
這樣一來我就只需要完成下面代碼可以打工搞成了
var c = this.application.getController("Users2");
c.init();

好了接下來就可以使用這個controller加載進來的一切view和mode資源了
切記:init()方法一點要手動調用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章