【发布时间】:2013-08-24 01:19:08
【问题描述】:
我已经熟悉了Knockout、Angular、Sammy、jQuery,一点微风,一点余烬。 Durandal 的教程和入门似乎都在说……首先添加 jQuery,也许还可以淘汰。
它是否处理与所有这些完全不同的事情? 它解决了什么样的需求才可能与淘汰赛一起使用?
它只是客户端路由和 ui 组件的大杂烩吗?
它在概念上自己做了什么?
【问题讨论】:
标签: durandal
我已经熟悉了Knockout、Angular、Sammy、jQuery,一点微风,一点余烬。 Durandal 的教程和入门似乎都在说……首先添加 jQuery,也许还可以淘汰。
它是否处理与所有这些完全不同的事情? 它解决了什么样的需求才可能与淘汰赛一起使用?
它只是客户端路由和 ui 组件的大杂烩吗?
它在概念上自己做了什么?
【问题讨论】:
标签: durandal
Durandal 与 Angular 的相似之处在于它为客户端 SPA Web 应用程序提供了一个 MV* 框架。
Angular 主要是(如果不是全部的话)自定义代码,而 Durandal 采用现有库,主要是 Knockout 和 RequireJS(Sammy 依赖已在 2.0 版本中消除),并提供管道以提供完整的 SPA 功能,包括视图/视图模型组合和标签 (spa) 导航。
对于 Knockout,Durandal 严重依赖 Knockout 来组合视图和视图模型。当视图注入 DOM 时,您的视图和视图模型会自动绑定数据。这样做的好处是我可以使用 Knockout 提供 V/VM 数据绑定,并让 Durandal 完成确定要使用哪个 v/vm、从服务器检索它并将其组合到当前屏幕的工作。
重申,Durandal 提供了一种将视图/视图模型映射到基于标签的路由的方法,从而为您提供 SPA 导航。通过指定 shell 或布局视图作为主视图,可以添加一个占位符,Durandal 使用该占位符来实现基本上是“屏幕演示者”模式。 Durandal 监听 URL 变化,可以自动激活,数据绑定(使用 Knockout),并显示匹配当前 URL 路由的视图。
如果您熟悉 WPF,您可能会认为 Durandal 提供类似 Prism 的功能作为其主要产品,以及其他旨在支持构建 Web 单页应用程序的好东西。
【讨论】:
Durandal 有几个优点,但也建立在现有库的基础上。它依赖于
这些不是“也许”。它们是硬依赖。 Durandal 没有它们就无法工作。
在它的核心,Durandal 添加了非常强大的 compose 绑定到淘汰赛。此绑定将在传递视图模型时自动定位视图(HTML 文件),从服务器检索它,将其绑定到视图模型,并将它们插入到 DOM 中。使用敲除template 绑定可以实现类似的行为,但管理模板可能会变得很麻烦。组合还将生命周期事件添加到流程中,这有助于确保正确设置和拆除视图模型。它还提供可选的 DOM 缓存。
Durandal 还提供了一些框架结构。它提供了一个简单的插件 API,它的 路由器 使用它通过哈希或推送状态提供 SPA 导航。它鼓励通过可覆盖的约定来组织视图模型和视图,以及使用 Require AMD 模块。它还提供了一个简单的事件模块,以允许创建和使用应用程序范围的事件。
除此之外它还有许多其他小功能,Durandal Homepage 有一个很好的参考。
【讨论】:
Durandal 是一个“功能齐全”的 SPA 框架,而 Knockout 只是数据绑定。它的范围类似于 Angular。
【讨论】:
Magento 2 支持 Knockout 和 RequireJS。 Durandal 可以添加在它之上,因此使用最新功能(组件、模板等)的可能性更大。
更好是因为:
比其他框架更稳定、更专业,出错更少
很棒的文档
简单的api
对 SEO 更友好! (你可以拥有所有的 html 并像组件一样使用它,混合情况)。 Angular 2 主张将逻辑与表现相结合。
html5 标准数据和绑定更好的代码可修改性(只需尝试在 react 中读取 html)
仍在维护
Durandal 的创建者有一段时间是 Angular 开发人员(3 个月),因此在思考方面存在一些相似之处。
在旧浏览器中工作! (IE6 >)
也有缺点,但主要是因为它没有在一个包装中提供这么多功能,而且采用的不是最新的尖端技术。
请分享更多关于 Durandal 的观点 :)
更多:https://johnpapa.net/compare-durandal-to-angular-not-knockout-to-angular/
【讨论】: