46

有谁知道RxJsKnockout之间的区别?在我看来,他们似乎在尝试解决同样的问题,构建一个事件驱动的 UI。但是,对于两者都有经验的人,它们有何不同/有何相似之处?你能描述一些关于他们的事情来帮助我选择吗?

4

2 回答 2

66

Steve(Knockout 的创建者)在他的博客中解释了不同之处:

我对 JavaScript 的 Rx 非常熟悉,最近在一个大型项目中大量使用它,事实上,在设计 Knockout 的各个方面都考虑到了我的 Rx 经验。

Knockout 的观察者模式实现与 Rx 的主要区别在于,Knockout 自动从常规过程代码中推断出可观察对象之间的关联和依赖关系,而无需通过特殊的功能 API 预先指定它们。我希望 Knockout 使用常规的过程/命令式代码,因为它对大多数开发人员来说更熟悉和平易近人。

另一个区别是 Rx 针对组合没有状态的事件流进行了优化。起初我对它及其功能的纯粹性很感兴趣,但过了一段时间后,我越来越觉得我在跳过尴尬的圈子,不得不发明额外的方法来模拟状态以有效地管理 UI 命令。这就是为什么在 Knockout 中,所有的 observables 都可以被视为有状态的——例如,你总是可以读取它们的最新值(顺便说一下,它是被缓存的——在底层数据发生变化之前它不会重新计算)。

Rx 在组合事件流的高级方法方面比 Knockout 更进一步,而 Knockout 在 UI 开发方面比 Rx 更进一步,让您可以将其可观察对象绑定到 HTML DOM 元素和模板,并以任何您想要的方式操作它们。Rx 非常擅长它的功能,但结果并不是我想要构建丰富的 UI 的方式——因此是 Knockout 的设计。

于 2011-07-22T23:18:23.450 回答
22

它们实际上是完全不同的框架,尽管我可以理解为什么你会看到交叉:

RxJs提供了一种针对异步流(如事件和 Web 请求)组合操作的方法,并包括组合流等高级场景(当 A 和 B 都发生时,启动它,但如果 A 或 B 再次发生,则取消它)

Knockout是一个 MVVM 框架,它允许您通过映射其功能的模型来管理用户界面的状态。这允许您的视图逻辑与您的视图分离。

于 2011-02-24T09:26:41.270 回答