2013-05-09 91 views
2

當構建應用程序時,設置控制器的最佳方式是什麼?我知道路由,事件監聽器和大多數所有的交互性都應該由控制器來管理,但是我的主控制器已經開始失去控制,並且我不知道如何將我的邏輯最好地分離成單獨的控制器,而不需要讓他們一直「運行」...初始化和解構控制器的最佳實踐

回答

2

將應用程序全部加載到應用程序啓動時即使使用數千個控制器,也可以使用 數百個 。這是需要時間的視圖渲染。

儘管使用sencha cmd,請確保您的應用程序儘可能最小化並且連接在一起。

在測試中,我創建了1000個簡單的控制器,就像這樣:

Ext.define('app.controller.ControllerN', { 
    extend: 'Ext.app.Controller', 
    init: function(application) {  
     this.control({ 
      buttonN1: { 
       click: function() { 
       } 
      }, 
      buttonN2: { 
       click:function(){} 
      }, 
      ... 20 listeners 
     }); 
    } 
}); 

我他們串聯成一個文件,並加載它們在app.js這樣的:

Ext.application({ 
    name:'app', 
    controllers:[ 
     'Controller0', 
     'Controller1' 
     ... 1000 controllers 
    ], 
    launch:function(){} 
} 

花瀏覽器刷新(Chrome)一秒鐘,直到最後一個控制器的init方法被調用。

+2

如何編寫1000個控制器,每個監聽20個事件?它不會像你想象的那麼快。確實,通常渲染會給你帶來瓶頸,但DeftJS的方式很好。在DeftJs中,您將視圖控制器綁定到視圖實例。在ExtJS控制器中是單身人士。 – catalinux 2013-06-09 15:35:29

+0

@catalinux。更新了我的答案。 Singleton控制器在extjs中工作正常,即使有多個視圖實例。你如何用Deft選擇表單中的所有字段? – 2013-06-25 21:21:52

1

我有類似的問題,所以我根據它將支持的業務功能劃分控制器,例如userController執行所有與用戶相關的操作,例如登錄,註銷,更新等,而cartController則執行與購物車有關的所有操作,如添加到購物車,應用優惠券,付款等。由於單個視圖可以具有與不同應用領域相關的許多功能,您可以在多個控制器中將此參考添加到此視圖中,並僅偵聽相應控制器中的相關事件。

+0

好的,你是否將所有的控制器添加到你的主應用程序?你知道如何根據活動視圖來定義你需要哪些控制器嗎? – 2013-05-10 19:00:42

+0

是的,我確實在'Ext.application'' controllers'數組中添加了所有控制器,以便應用程序加載所有這些控制器,並根據控制器的'control'配置找出哪個控制器將偵聽觸發事件。順便說一句,我不明白你的問題:'你知道怎麼根據活動視圖定義你需要哪個控制器嗎?'因爲控制器的'ref' config是我們定義控制器處理哪些視圖的地方。 – ThinkFloyd 2013-05-13 05:39:46