2012-03-07 41 views
1

遵循Patterns For Large-Scale JavaScript Application ArchitectureNicholas Zakas: Scalable JavaScript Application Architecture的想法,我開始使用這種架構實施我的大學許可項目。模塊沙盒核心Javascript模式中的深層分離

我遇到了不清楚應該如何繼續的情況。爲了說明這個場景,我將嘗試給出一個堅實的例子:

我有兩個模塊通過CORE啓動,它們是合法的模塊,每個模塊都可以獲得一個沙箱實例。一個模塊顯示管理區域的儀表板主要內容,另一個顯示管理區域的用戶配置文件主要內容。

enter image description here

兩個模塊都使用沙箱從服務器通過Ajax獲取的內容。這是不清楚的東西彈出的地方。兩個模塊都有一個小但明顯的共同點。一個小型的用戶統計分區,顯示一些關於當前登錄用戶的數據。

此設計模式規定模塊不應具有除Sandbox之外的任何其他依賴項。但是,我很清楚,用戶統計迷你模塊是一個獨立組件,由儀表板和用戶配置文件大模塊使用。

我的問題是,我將如何公開用戶統計迷你模塊到我的儀表板和配置文件大模塊?

回答

2

無論如何,模塊應該進行交互,模式的思想是分離這種交互,所以它們不應該直接交互,但可以通過核心中介使用訂閱/發佈事件來實現。

您可以發佈例如displayUserStats事件,其中包含儀表板模塊中的其他數據,並在您的小模塊中訂閱該事件。

+0

所以我應該看到迷你模塊作爲獨立模塊。還需要澄清的是Dom內容的渲染。儀表板和用戶配置文件具有不同的HTML模板,並且用戶統計信息在大模塊中的不同位置呈現。 : - ? – 2012-03-07 08:40:20

+0

那麼,你可能會緊密地耦合模塊,創建'Core.getModule'函數。無論如何,因爲你正在渲染模板,所以你需要一些方法來將部分模板渲染委託給另一個模塊/函數。這也可以通過事件來完成。 – kirilloid 2012-03-07 09:07:58

+0

Core.getModule是我想到的第一個想法...我的沙盒使用dom目標作爲參數之一進行實例化,使得附加操作僅在目標DOM節點內發生。我找到了我的答案! :)我可以使用getModule並將迷你模塊的目標設置爲inMemory創建的目標,當將模塊添加到模板時,它們將被大模塊使用! – 2012-03-07 09:16:53