2011-05-29 82 views
9

當使用煎茶觸摸[較新] MVC位我發現,90%的我的調度呼叫看起來像:爲什麼要使用Ext.dispatch而不是直接調用控制器代碼?

Ext.dispatch({ 
    controller: "customers", 
    action: 'show', 
    record: record 
}); 

這很好,我喜歡流動委託給獨立的控制器代碼,而比事件的複雜的路徑,但我還沒有看到任何優勢只是在做類似:

controllers.customers.show({ 
    record: record 
}); 

哪個更短和更清潔。我覺得我只是爲了它而遵循Ext.dispatch的模式。我的應用程序不會從狀態的push/pop網址歷史記錄中受益,這是我可以看到使用這種更復雜的方法的唯一原因。

我錯過了什麼?通過使用Ext.dispatch來調用控制器會有什麼收穫?

回答

9

beforedispatch事件很方便,以防您需要將它們重定向到另一個控制器。

使用調度還可以根據需要加載控制器代碼,而不是在加載頁面時一次性加載控制器代碼。我將應用程序的啓動時間縮短了一半。

你說你的應用程序不需要它,但能夠設置historyUrl並直接鏈接到網頁將是我認爲其他用戶的主要好處。

所以我想這一切都取決於應用程序是否有意義使用它。

+0

你能詳細闡述一下你如何加載控制器代碼JIT,或者鏈接到一個關於這個的教程? – 2011-12-01 13:35:31

+0

@TomášFejfar我將Ext.util.Dispatcher調度函數保存到一個閉包變量中,然後用我自己的代碼替換dispatch。在新函數中,我看看傳遞給dispatch的選項,它應該包含控制器的名稱。如果Ext.ControllerManager.get返回具有該名稱的控制器,則調用原始調度功能。否則,我使用requireJS(任何類似的庫將會這樣做)動態地加載包含控制器的腳本(即「/ app/controllers/users」)。當腳本完成加載後,我的控制器應該被註冊,並且像往常一樣調用調度。 – 2011-12-02 00:13:01

+0

順便說一句,這是爲1.0。 Sencha touch 2.0可能會讓我的方法過時。 – 2011-12-02 00:17:36

相關問題