2012-04-24 58 views
1

我发现了(感谢KO论坛),对于计算的观测,这是不可能的链这样写的: viewModel.someComputed(20).otherComputed(100).someObservable('hi')改变dependentObservable()函数,让链接写入

这郁闷我,因为我有很多观测值,我想要extend() - 所以它们会变成计算的,所以我必须删除所有的链接调用。

所以我做的dependantObservable()函数,这个小变化(刚刚添加:返回此;)

​​

,现在我可以写链!我的问题是:这样做有什么不好? 我假设有一个,因为这是没有实现:P

感谢, 乌里摹

+0

我不认为这会导致任何问题。 – 2012-04-25 14:07:52

回答

3

不会有任何问题。首先,在更改之前编写的所有代码假定计算的observables不可链接,因此没有人会使用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在内的大多数其他库并不依赖于它。

另外史蒂夫桑德森可能已经忘记了对计算观测值的支持。给他一个建议;)

+0

感谢仔细想出来的答案,我们已经达到了相同的结论:) – antishok 2012-05-05 04:10:06