2012-04-26 97 views

回答

13

当您尝试完成的功能涉及UI和数据时,您通常会希望选择自定义绑定,因此您需要访问元素并通常需要一些数据来控制对元素执行的操作。

在这一点上,扩展器和.fn之间确实没有很大的区别。在通过.fn获得共享功能之前,略微增加了扩展程序。

它通常不是问题,但扩展将只适用于observables和计算observables。如果使用.fn,则需要将函数添加到ko.subscribable.fn,以便它们都可用。但是,在某些情况下,您的功能可能仅适用于其中一种,因此使用ko.observable.fnko.computed.fn将是更好的选择。

我发现扩展.fn是最干净的语法。如果你确定要返回this或者新的类型,那么你可以轻松地支持链接。扩展程序更加明确一点,并确保类型的API表面区域保持精简(对于什么值得)。

+0

嗨,@RPNiemeyer。 “你的意思是”扩展器更加明确一点,并确保类型的API表面区域保持精简(值得的值)“。 – 2016-06-06 22:24:49

+0

@David - 扩展器是明确的,你必须调用'.extend'并传递特定的扩展器和数据。你清楚地明白你正在使用扩展器和哪一个。或者,当你更新一个'.fn'对象时,它会使所有实例都可用,这意味着,例如,基于扩展'.fn',可观察对象可能具有各种不同的新方法。 ,这可能会导致混淆(什么是内置的,什么是扩展?)。即使有这样的说法,由于我上面提到的原因,我总是希望扩展'.fn'。 – 2016-06-11 19:27:57