Extjs建立多個application實現多模組MVC動態載入。。

來源:互聯網
上載者:User

原創作品:勿轉載。(這麼做會有問題。。controller裡面的control註冊的事件會丟失。~~~先不這麼弄了哦。官方好像好像是一個應用一個application。有實現的方法,但是修改起來代碼不好理解,萬一出了問題還不好修改,所以還是不逆天了。貌似4.2裡面應該會支援動態載入controller。。看到了getApplication的api,通過application的getController方法可以註冊controller,controller再執行個體化,並註冊相關view的事件。)

通過動態建立controller來實現多模組Mvc

傳送門:http://blog.csdn.net/jiushuai/article/details/8185884

java進階交流群:37341439   歡迎各位朋友一起交流。

這幾天用extjs4.1做項目,有很多功能模組,使用mvc開發,系統有很多功能模組。如果用一個application進行開發,那麼所有功能模組的js都得全部載入。。。。很恐怖。。

例如:

圖片

Ext.Loader.setConfig({
    enabled : true
});
Ext.application({
    name: 'IV',
    appFolder: 'js/app',
    autoCreateViewport:true,
    controllers: [
       'config.ModuleController','config.user.UserController',''config.system.UserController''
    ],
    launch: function() {
        Ext.tip.QuickTipManager.init();
    }
});

說明:

config.ModuleController是主模組,(其實就是這個介面,主介面裡面點擊左邊的按鈕“使用者管理”,“子系統管理”來操作各個子系統)

'config.user.UserController'是使用者管理模組

‘config.system.UserController''是子系統管理模組。

如果這樣做的話,那麼頁面一載入就得把這3個模組相關的js檔案都載入進來,即使還沒有點擊“子系統管理模組”的按鈕,但是子系統管理模組的相關js也會載入進來,比較佔用資源(因為extjs會將controller裡面配置的view和model和store的檔案以及依賴都載入進來)

實現按需載入方法:

將以上的appication代碼修改如下:

Ext.application({
    name: 'IV',
    appFolder: 'js/app',
    autoCreateViewport:true,
    controllers: [
       'config.ModuleController'
    ],
    launch: function() {
        Ext.tip.QuickTipManager.init();
    }
});

這樣就只載入主系統相關的js

然後建立各個子系統的app目錄:裡面的目錄結構也是 controller,view,model,store,

然後再點擊左邊按鈕的時候,載入子系統的指令碼如下(代碼例子是載入使用者管理子模組):

Ext.Loader.setPath('Module','js/module');
            Ext.require("Module.UserModule",function(){
                var app = Ext.create('Module.UserModule');          //需要建立user管理模組的app
                Ext.onReady(function(){                                 //必須要等user管理模組的app建立完成後才執行
                    var userPanel = center.child('userPanel');
                    if(!userPanel){
                        var userPanel =  Ext.widget('userPanel',{title:'系統設定>使用者管理'});
                        center.add(userPanel);
                        center.setActiveTab(userPanel);
                    }else{
                        center.setActiveTab(userPanel);
                    }
                });
});

說明:

以上例子的'js/app'就是user管理模組的根目錄。

使用者管理模組採用的首碼都是UM,(主模組用的是IV)

js/module目錄是放置user管理模組的application定義:如下:

Ext.define('Module.UserModule', {
    extend: 'Ext.app.Application',
    name: 'UM',
    appFolder: 'js/userApp',
    controllers: [
        "config.user.UserController"
    ],
    launch: function() {
    }
});

  Ext.require("Module.UserModule",function(){})載入了user管理模組的application。 reauire方法的第二個參數是載入完後的回呼函數。

當載入完user管理模組的application定義以後需要 執行個體化該application。

var app = Ext.create('Module.UserModule');    

執行個體化後才會將application裡面的依賴js給載入,不執行個體化的話,是不會載入依賴的。

然後需要在Ext.onReady()裡面去執行接下來的操作。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.