【问题标题】:Can multiple observables post to the same topic in knockout pubsub多个可观察对象可以在淘汰赛 pubsub 中发布到同一主题吗
【发布时间】:2017-12-16 00:46:14
【问题描述】:

我正在使用 knockout 的本机发布/订阅支持。我了解我需要执行以下操作才能在主题中发帖/阅读:

var postbox = ko.subscribable();
var vendorTopic = 'vendorInfo';

//View model 1
//Subscribe
ko.subscribable.fn.subscribeTo = function(topic) {
    postbox.subscribe(this, null, topic);
    return this;  //support chaining
};
this.selectedVendor = ko.observableArray().subscribeTo(vendorTopic);

//View model 2
//Publish
ko.subscribable.fn.publishOn = function (topic) {
    this.subscribe(function (newValue) {
        postbox.notifySubscribers(newValue,topic);
    });
    return this; //support chaining
};
this.vendor = ko.observableArray([]).publishOn(vendorTopic);

但是,如果我的 viewmodel2 有 2 个可观察对象并且我希望能够在我的 viewmodel1 中访问它们,我是否需要创建两个主题 - 每个可观察对象一个?如果说我的组件有 15 个我想在另一个组件中使用的 observable,这听起来像是一个糟糕的设计。

但我在互联网上找不到任何其他有用的示例。任何帮助表示赞赏!

【问题讨论】:

  • 只是想一想,我们应该能够以键值对的方式发送一个包含可观察对象的新值的对象数组,然后在 viewmodel1 内部我们可以解析对象,对吧?

标签: knockout.js publish-subscribe


【解决方案1】:

作为@gkb cmets,您可以传递一个包含所有所需值的复杂对象。

对于您的代码,我假设您正在使用 knockout-postbox 或至少从作者的博客 (knockmeout) 获取代码 sn-ps,在这种情况下,您需要使用不同的主题来同步每个 observable一个。

let vm1 ={
   prop1:ko.observable().syncWith('prop1'),
   prop2:ko.observable().syncWith('prop2'),
   prop3:ko.observable().syncWith('prop3'),
};

let vm2 ={
   prop2:ko.observable().syncWith('prop2'),
}

let vm3 ={
   prop1:ko.observable().syncWith('prop1'),
   prop2:ko.observable().syncWith('prop2'),
   prop3:ko.observable().syncWith('prop3'),
}

在本例中,每个属性都将在所有视图模型中同步。

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 2014-08-08
    • 2017-09-19
    • 2014-11-05
    • 2012-09-08
    • 2012-07-07
    • 2015-01-25
    相关资源
    最近更新 更多