關於BoilerplateJs的例子,我們應該如何調整這些模塊以便以這種方式進行相互通信,一旦用戶對一個模塊做了任何更改,其他相關模塊應該隨着更改完成而更新。是否有任何方式與boilerplatejs中的模塊進行內部通信?
例如,如果有一個模塊從用戶檢索輸入作爲名稱和銷售額,另一個模塊更新表或圖形中檢索到的數據,那麼您能否用一些示例來解釋,考慮事件時如何發生這些內部連接處理?
謝謝!
關於BoilerplateJs的例子,我們應該如何調整這些模塊以便以這種方式進行相互通信,一旦用戶對一個模塊做了任何更改,其他相關模塊應該隨着更改完成而更新。是否有任何方式與boilerplatejs中的模塊進行內部通信?
例如,如果有一個模塊從用戶檢索輸入作爲名稱和銷售額,另一個模塊更新表或圖形中檢索到的數據,那麼您能否用一些示例來解釋,考慮事件時如何發生這些內部連接處理?
謝謝!
在BoilerplateJS中,你的每個模塊都有它自己的moduleContext對象。這個模塊上下文對象包含兩個方法'listen'和'notify'。查看'/src/core/context.js'中的上下文類以獲取更多詳細信息。
需要'偵聽'事件的組件應該通過指定事件和回調處理程序的名稱來註冊該事件。引發事件的組件應使用'notify'方法讓其他人知道發生了一些有趣的事情(可選地傳遞一個參數)。
從GitHub獲取最新BoilerplateJS代碼的更新。我只是通過使clickCounter成爲一個複合組件來完成更改,其中'clickme組件'引發了一個事件,'樂透組件'正在傾聽事件以進行響應。
代碼用於通知事件:
moduleContext.notify('LOTTERY_ACTIVITY', this.numberOfClicks());
代碼收聽事件:
moduleContext.listen("LOTTERY_ACTIVITY", function(activityNumber) {
var randomNum = Math.floor(Math.random() * 3) + 1;
self.hasWon(randomNum === activityNumber);
});
我會看看使用發佈訂閱庫,如Amplify。使用這種技術,一個模塊很容易作爲事件發佈者和其他人註冊爲訂閱者,以高度分離的方式傾聽和響應這些事件。
由於您已經在使用Knockout,您可能會首先嚐試使用Ryan Niemeyer的knockout-postbox插件。這個圖書館的更多背景是available here,包括a demo fiddle。如果需要,您可以隨時切換到Amplify。
順便說一句.. BoilerplateJS使用的[pubsub.js](HTTPS略加修改:// github.com/federico-lox/pubsub.js)執行Federico Lucignano幕後。 – Hasith