遵循本指南:http ://www.knockmeout.net/2012/05/using-ko-native-pubsub.html
我试图在 Durandal 应用程序中实现发布/订阅功能。durandal 应用程序的结构为我提供了一个 shell.js 模型,它使用其他视图模型,例如“home.js”。
在 shell.js 中,我有以下代码:
var postbox = new ko.subscribable();
ko.subscribable.fn.publishOn = function (topic) {
this.subscribe(function (newValue) {
postbox.notifySubscribers(newValue, topic);
});
return this; //support chaining
};
ko.subscribable.fn.subscribeTo = function (topic) {
postbox.subscribe(this, null, topic);
return this; //support chaining
};
this.myObservable = ko.observable().subscribeTo("myTopic");
然后在我的“home.js”中,我有以下内容:
this.myObservable = ko.observable("myValue").publishOn("myTopic");
但是 myObservable 在 shell.js 中始终是“未定义的”。
我不知道如何在 jsFiddle 上只发布我项目的相关部分,所以我只是在这里创建了一个简单的示例来演示我的问题:
在这里,我应该看到公共名称和私有名称,但我只看到私有名称。为什么“.subscribeTo”在这里不起作用?我在 chrome 中,我已经清除了我的缓存。
更新:我认为这是因为“subscribeTo()”值仅在“publishOn()”值更改时捕获一个值,但不捕获加载时的值。看到这个变化:
有什么方法可以使“subscribeTo()”值获得主题的初始值,这样就不会发生这种情况?