我正在使用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个observable并且我希望能够在我的viewmodel1中访问它们,我是否需要创建两个主题 - 每个可观察一个主题?如果说我的组件有15个我想在另一个组件中使用的可观察对象,那听起来就像是一个糟糕的设计。
但我在互联网上找不到任何其他有用的例子。任何帮助表示赞赏!
答案 0 :(得分:0)
作为@gkb注释,您可以传递一个包含所有需要值的复杂对象。
对于您的代码,我假设您正在使用knockout-postbox或至少从作者的博客(knockmeout)获取代码段,在这种情况下,您需要使用不同的主题同步每个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'),
}
在此示例中,将在所有视图模型中同步每个属性。