不引人注目的淘汰赛

Bre*_*tin 34 javascript unobtrusive-javascript knockout.js

我最近加快了Knockout的速度,我认为这是一个很棒的框架.但是我有一个问题.

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

这是否会使Knockout本身具有突兀性?

我应该接受它是什么而不是在实践中担心?

或者我是否应该使用任何模式/技术来使Knockout不引人注目?

Mic*_*pas 21

好问题.我一直在编写复杂的KnockoutJS视图,直到我切换到Ryan Niemeyer的类绑定提供程序之前,我从未满意.

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

查看示例TodoMVC应用程序.

  • 当然,对于小型的Knockout应用程序来说这是一种过度杀伤,但还有其他几个很好的理由.见[这里](https://github.com/mberkom/knockout-classBindingProvider#what-are-the-benefits-of-this-approach) (2认同)

And*_*ers 16

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

所以不要这样做

<span data-bind="visible: errors().length > 0">You have errors</span>
Run Code Online (Sandbox Code Playgroud)

使用计算的可观察量

<span data-bind="visible: hasErrors">You have errors</span>
Run Code Online (Sandbox Code Playgroud)

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

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


Mik*_*ell 5

我应该接受它是什么而不是在实践中担心?

我的理解是"不引人注目"意味着一些不同的东西.

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

我曾经在其他项目中工作过,我们必须非常小心使用像Knockout这样的框架.如果您在很大程度上依赖于Knockout在您的应用程序中执行核心功能,那么您的应用程序本身就是突兀的.这是否应该打扰你取决于你的目标受众.

"不显眼的JS"的另一个原则是JavaScript和HTML之间的关注点分离.我实际上在辩论这个原则是多么重要.我认为更重要的原则是视图模型逻辑显示逻辑之间的关注点分离,遵循MVVM模式.即使你在数据绑定中加入了一些JavaScript逻辑,Knockout也能很好地鼓励清晰地分离view/vm问题.只要它是严格的视图逻辑,我认为它实际上属于视图.