我試圖在knockoutjs
驅動的應用程序中實現我的視圖模型之間的通信。我腳手架它使用yeoman
工具,你可以看到它使用AMD
:ViewModels在KnockoutJS中的通信
define(['knockout', 'signals', 'text!./nav-bar.html'], function(ko, Signal, template) {
function NavBarViewModel(params) {
this.route = params.route;
}
return { viewModel: NavBarViewModel, template: template };
});
我必須定義一個對象,我會在以後使用分派事件,對吧?類似的東西:
var EventDispatcher = {
itemClicked: new Signal()
};
然後,只要東西在NavBarViewModel
發生了,我想這樣做:
EventDispatcher.itemClicked.dispatch();
的問題是 - 我應該在哪裏把這個東西此事件?很明顯,它應該是某種全球性的對象,所以每個虛擬機都可以控制它,但這會很難看。想到依賴注入,因爲我選擇的這個架構中的所有其他部分都是這樣完成的,但是如何實現呢?我來自WPF, MVVM
世界,到目前爲止,我已經使用了MVVMLight框架,它具有這個偉大的Messenger
組件。在JS世界裏有沒有類似的東西(如果我已經使用了js-signals
lib,那麼我應該如何使用它來實現我的目標?)
我也可以使用subscribable
內置到knockout fw中的對象,但問題仍然存在 - 放在哪裏(或如何在虛擬機之間共享實例)?
在您發佈此答案之前,我發現了這一點:https://github.com/rniemeyer/knockout-postbox。哪個更好一些,因爲我不需要在我的任何虛擬機上包含更多的依賴關係 - 它只是增加了一些功能給Knockout :)。然而,你回答我問的確切問題,所以我接受你的答案。 –