34

我最近开始使用 Knockout,我认为这是一个很棒的框架。不过我有一个担心。

我发现在非平凡的绑定案例中,我的视图(标记)中有一些 javascript 代码片段。事实上,Knockout 文档中的很多代码示例也证明了这一点。

这是否使 Knockout 天生就显得突兀?

我应该接受它的本来面目,而不是在实践中担心吗?

或者我应该采用什么模式/技术来使 Knockout 不引人注目?

4

5 回答 5

21

好问题。一段时间以来,我一直在编写复杂的 KnockoutJS 视图,直到我改用Ryan Niemeyer 的类绑定提供程序时才感到满意。

Knockout ClassBindingProvider 允许您在 JavaScript 对象中声明绑定,然后从data-class类似于 css 类工作方式的属性引用它们。效果很好!

查看示例 TodoMVC 应用程序

于 2012-11-19T21:30:17.507 回答
16

尝试将 Javascript 排除在绑定之外,仅将其用于元数据

所以而不是做

<span data-bind="visible: errors().length > 0">You have errors</span>

使用计算的 observable

<span data-bind="visible: hasErrors">You have errors</span>

更新:我继续为 KO 创建了一个基于配置 API 的约定 它可以在这里找到https://github.com/AndersMalmgren/Knockout.BindingConventions/wiki

而不是做<button data-bind="click: save">Save</button>你在做<button data-name="save">Save</button>。该库将按照约定理解您要将保存功能连接到按钮单击处理程序。按照惯例,如果存在 canSave 成员,它也会绑定启用。 http://jsfiddle.net/3Ajnj/15/

于 2012-11-19T10:06:36.127 回答
5

我应该接受它的本来面目,而不是在实践中担心吗?

我的理解是“不引人注目”意味着一些不同的东西。

“不引人注目”的一个方面是网站应该在 JavaScript 支持有限或根本不支持的浏览器上维护核心功能。为此,您对这一原则的关注应该取决于您的目标受众。我参与过一些我非常了解我的目标受众的项目,以至于我有幸说:“如果你想利用这个网络应用程序,请使用启用 JavaScript 的 Chrome 等现代浏览器。” 在这种情况下,您可以随意使用最新、最棒的前端框架。

我参与过其他项目,但情况并非如此,我们必须非常小心地使用 Knockout 等框架。如果您在应用程序中严重依赖 Knockout 来完成核心功能,那么您的应用程序本质上是突兀的。这是否会打扰您取决于您​​的目标受众。

“不显眼的 JS”的另一个原则是 JavaScript 和 HTML 之间的关注点分离。我实际上在争论这个原则的重要性。我认为更重要的原则是视图模型逻辑显示逻辑之间的关注点分离,遵循 MVVM 模式。即使您在数据绑定中添加了一些 JavaScript 逻辑,Knockout 在鼓励清晰分离视图/虚拟机关注点方面做得非常出色。只要是严格的视图逻辑,我认为它实际上属于视图。

于 2014-03-19T18:26:36.140 回答
4

我建议您访问 Ryan 的博客并阅读:“在 KnockoutJS 中简化和清理视图”,如果您还没有这样做的话……

http://www.knockmeout.net/2011/08/simplifying-and-cleaning-up-views-in.html

它为您解释了一些重构代码的好方法,因此它不会使 html 变得混乱并保持更干净。

于 2013-08-25T20:12:27.730 回答
1

所选答案中建议的绑定提供程序的替代方案是knockout.unobtrusiveBindingProvider,它是“用于 Knockout JS 的不显眼的、基于约定的绑定提供程序,可以将 HTML 和 Knockout 数据绑定完全分离”。

于 2016-08-08T09:00:00.410 回答