Вычислительная подписка на нокаут для необъявленной наблюдаемой
Есть ли способ вручную добавить или удалить подписку на расчетный нокаут? В сценарии, в котором я хочу добавить подписку к наблюдаемой, еще не объявленной, или как свойство, которое может измениться.
то есть:
self.myComputed = ko.computed(function() {
return "Value Is: " + self.myObservable();
})
self.myObservable(1);
//self.myComputed returns "Value Is: 1"
тогда позже:
self.myObservable = ko.observable(2); //new observable to property
//some code to add subscription to self.myComputed here
self.myObservable(3);
//self.myComputed returns "Value Is: 3" now
Я понимаю, что есть способы обойти эту проблему (например, просто повторно использовать self.myObservable для следующего значения), но иногда мне бы хотелось вручную поработать с подписками.
1 ответ
Я не могу понять, почему вы хотите это сделать, но вы можете создать вычисляемый объект, который ссылается на наблюдаемое по имени свойства, а не по значению.
self.myComputed = function () {
return "Value is "+self["myObservable"]();
};
self.myObservable(1);
self.myComputed(); // Returns "Value is 1"
var oldMyObservable = self.myObservable;
self.myObservable = ko.observable(2);
self.myComputed(); // Returns "Value is 1", since the computed hasn't updated
oldMyObservable.notifySubscribers(); //force myComputed to recompute
self.myComputed(); // Returns "Value is 2"
Конечно, я думаю, что подход к наблюдаемой, содержащей наблюдаемое, более чистый; но я думал, что подход выше был достаточно интересным для публикации.