【发布时间】:2014-05-29 06:28:51
【问题描述】:
有没有办法手动添加或删除对淘汰赛计算的订阅?在我想为尚未声明的可观察对象添加订阅或作为可能更改的属性的情况下。
即:
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 重用于下一个值),但我有时想手动修改订阅。
【问题讨论】:
-
计算的 observable 的订阅在声明时注册到实际的 observable 对象,而不是视图模型上的属性名称 - 您只能更新订阅的 observable 的值以供计算选择它了。另一种方法是在对 observable 结构进行任何更改以生成对新 observable 的新订阅后重新创建计算。
-
感谢您的回复!这是绝对正确的。在这种情况下,您还需要确保在创建新的之前手动处理计算。
-
你可以使
self.myObservable成为一个可观察的可观察的。所以你会做类似self.observable = ko.observable(ko.observable(1)); self.myComputed = ko.computed(function(){ return "value is: " + ko.unwrap(self.observable()); }); self.observable(ko.observable(3));的事情。在技术上工作;但是,我必须说我不确定我是否真的了解用例(但我不需要,只要你这样做:))。 -
感谢您的回复!目前没有我要反对的用例,只是我过去想到的,我可能想创建一个对象并通过一系列输入移动它,然后最终以数组或一些东西,一个新对象的可重用“流”。但是,在最后创建新对象并重置可观察值同样容易。