Knockout.js 淘汰组件通信

Knockout.js 淘汰组件通信,knockout.js,single-page-application,knockout-components,Knockout.js,Single Page Application,Knockout Components,我有一个web应用程序,我想转换成和SPA使用ko组件。我想知道如何进行一种组件间通信 例如,我想要一个“通知”组件,其中每个组件都可以发送通知 我通过在主视图模型中共享一个可观察阵列来找到解决方案: var VM = function() { var self = this; this._notifications = ko.observableArray([]); this.notifications = { addInfo: function(tex

我有一个web应用程序,我想转换成和SPA使用ko组件。我想知道如何进行一种组件间通信

例如,我想要一个“通知”组件,其中每个组件都可以发送通知

我通过在主视图模型中共享一个可观察阵列来找到解决方案:

var VM = function() {
    var self = this;

    this._notifications = ko.observableArray([]);
   this.notifications = {
        addInfo: function(text){
            self._notifications.push(text);
        }
    }
}



请看这里:

我对这个解决方案并不完全满意,我宁愿将通知数据保存在notify组件中


你有什么办法解决这个问题吗

您可以使用
ko.subscribable
实现一个简单的发布/订阅消息总线:

  • ko.subscribable.subscribe
    订阅新邮件
  • ko.subscribable.notifySubscribers
    发布新消息

    更多关于这方面的信息,请访问Ryan Niemeyer

在本例中,您可以基于
ko.subscribable
创建一个全局
postbox
对象。组件在其中发布消息,通知vm订阅消息

您甚至可以按主题发布和订阅消息

邮箱: 一个组成部分: 如果:
谢谢,我正在看rniemeyer的淘汰赛邮箱,我想这就是解决办法。
<comp1 params="{app: $data}"></comp1><br/>
<comp2 params="{app: $data}"></comp2><br/>
<notif params="{app: $data}"></notif>
var postbox = (function() {
    var pb = new ko.subscribable();
    return {    
        subscribe: function(handler, topic) {
            pb.subscribe(handler, null, topic)
        },        
        publish: function(message, topic) {
            pb.notifySubscribers(message, topic);
        }
    };
}()); 
var comp1 = function(params) {           
    this.addToNotif = function(){
        postbox.publish("comp1 was here");
    }
}
...
postbox.subscribe(function(message) {
    self.notifs.push(message);
});