我发现(感谢KO论坛)对于计算的observable,不可能像这样链接写:
viewModel.someComputed(20).otherComputed(100).someObservable('hi')
这让我感到很失望,因为我有许多我想要extend()
的可观测量 - 所以它们会被计算出来,所以我必须删除所有链接的调用。
所以我在dependantObservable()函数中做了这个小改动(刚添加:return this;)
function dependentObservable() {
if (arguments.length > 0) {
set.apply(dependentObservable, arguments);
return this;
} else {
return get();
}
}
现在我可以连结写作了!
我的问题是:这样做的缺点是什么? 我假设有一个,因为没有实现:P
谢谢, Uri G
答案 0 :(得分:3)
不会有任何问题。首先,在更改之前编写的所有代码都假定计算的observable不可链接,因此没有人会使用setter返回的值。其次,使用返回值的所有地方都在调用getter。
换句话说,所有遗留代码都是
var value = obj.property(); // note the lack of parameters
obj.property(value); // note the absence of either chaining or assignment
不链接此代码:
obj.property(value).anything
会抛出类型错误。所以唯一需要担心的是
someVar = obj.property(value);
目前始终返回undefined
。至于我,它看起来像一个相当虚伪的代码,因为有更好的方法将一些变量设置为undefined
。
所以如果你想让chainig接受这个改变。
知道为什么没有实施吗?
因为在大多数传统语言(Java,C#,C ++,PHP)中,链接通常是一个例外而不是常态。在JavaScript世界中,只有少数库使用链接,如jQuery,Underscore和d3。但是,大多数其他库(包括Knockout)都不依赖它。
Steve Sanderson也可能忘记为计算的观察者提供支持。给他一个建议;)