このガイドに従う: http://www.knockmeout.net/2012/05/using-ko-native-pubsub.html
Durandal アプリケーションに pub/sub 機能を実装しようとしました。durandal アプリの構造により、"home.js" などの他のビューモデルを使用する shell.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");
ただし、shell.js では myObservable は常に「未定義」です。
プロジェクトの関連部分のみを jsFiddle に投稿する方法がわからなかったので、ここで最小限の例を作成して問題を示しました。
ここでは、公開名と非公開名の両方が表示されているはずですが、非公開名しか表示されていません。ここで「.subscribeTo」が機能しないのはなぜですか? 私はクロムを使用しており、キャッシュをクリアしました。
更新:「subscribeTo()」の値は、「publishOn()」の値が変更されたときにのみ値をキャプチャし、ロード時に値をキャプチャしないためだと思います。この変更を参照してください。
これが起こらないように、「subscribeTo()」値にトピックの初期値を取得させる方法はありますか?