我最近加快了Knockout的速度,我认为这是一个很棒的框架。但是我有一个问题。
我发现在非平凡的绑定案例中,我有javascript代码片段爬进我的视图(标记)。事实上,Knockout文档中的不少代码示例也证明了这一点。
这是否会使Knockout本身具有突兀性?
我应该接受它是什么而不是在实践中担心?
或者我是否应该使用任何模式/技术来使Knockout不引人注目?
答案 0 :(得分:21)
好问题。我一直在写复杂的KnockoutJS视图一段时间,直到我切换到Ryan Niemeyer's class binding provider才满意。
Knockout ClassBindingProvider允许您在JavaScript对象中声明绑定,然后从data-class
属性引用它们,类似于css类的工作方式。它很棒!
答案 1 :(得分:16)
尝试将Javascript保留在绑定之外,并仅将其用于元数据
所以不要做
<span data-bind="visible: errors().length > 0">You have errors</span>
使用计算的可观察
<span data-bind="visible: hasErrors">You have errors</span>
更新:我继续为KO 创建了一个Convention over configuration 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/
答案 2 :(得分:5)
我应该接受它是什么而不是在实践中担心?
我的理解是&#34;不引人注目的&#34;意味着一些不同的东西。
&#34;不引人注意的一个方面&#34;是网站应该在JavaScript支持有限的浏览器上维护核心功能,或者根本不支持。为此,您对此原则的关注应取决于您的目标受众。我已经完成了一些项目,我对目标受众的了解非常充分,我可以说,#34;如果你想利用这个网络应用程序,可以使用像Chrome这样的现代浏览器,并启用JavaScript。 &#34;在这种情况下,随意使用最新,最棒的前端框架。
我曾在其他项目中工作,但事实并非如此,我们必须非常谨慎地使用像Knockout这样的框架。如果您在很大程度上依赖于Knockout在您的应用程序中执行核心功能,那么您的应用程序本身就是突兀的。这是否应该打扰你取决于你的目标受众。
&#34;不引人注目的JS&#34;是JavaScript和HTML之间的关注点分离。我实际上在辩论这个原则是多么重要。我认为更重要的原则是遵循MVVM模式在视图模型逻辑和显示逻辑之间分离关注点。即使你在数据绑定中加入了一些JavaScript逻辑,Knockout也能很好地鼓励清晰地分离view / vm问题。只要它严格视图逻辑,我认为它实际上属于在视图中。
答案 3 :(得分:4)
我建议您,访问Ryan的博客并阅读:“简化并清理KnockoutJS中的视图”,如果您还没有这样做...
http://www.knockmeout.net/2011/08/simplifying-and-cleaning-up-views-in.html
它解释了一些很好的方法来重构你的代码,因此它不会使html混乱并使其更加干净。
答案 4 :(得分:1)
对于所选答案中建议的绑定提供程序,另一种选择是knockout.unobtrusiveBindingProvider,它是“Knockout JS的一种不引人注目的,基于约定的绑定提供程序,可以清晰地分离HTML和Knockout数据绑定”。