Javascript 不引人注目的击倒

Javascript 不引人注目的击倒,javascript,knockout.js,unobtrusive-javascript,Javascript,Knockout.js,Unobtrusive Javascript,我最近已经赶上了淘汰赛的速度,我认为这是一个很棒的框架。然而,我有一个担忧 我发现,在非平凡的绑定案例中,我的视图(标记)中潜入了javascript代码片段。事实上,敲除文档中的许多代码示例也证明了这一点 这是否会让击倒本身就很突出? 我是否应该接受它的本质,而不是在实践中担心它 或者我是否应该使用任何模式/技术来使敲除变得不引人注目?尝试将Javascript排除在绑定之外,并且仅将其用于元数据 因此,与其这样做 <span data-bind="visible: errors().l

我最近已经赶上了淘汰赛的速度,我认为这是一个很棒的框架。然而,我有一个担忧

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

这是否会让击倒本身就很突出?

我是否应该接受它的本质,而不是在实践中担心它


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

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

因此,与其这样做

<span data-bind="visible: errors().length > 0">You have errors</span>
您有错误
使用计算出的可观测数据

<span data-bind="visible: hasErrors">You have errors</span>
您有错误
更新:我继续为KO创建了一个配置API约定 可以在这里找到

而不是执行
Save
,而是执行
Save
。按照惯例,库将理解您希望将save函数连接到按钮单击处理程序。按照惯例,如果存在canSave成员,它也将绑定启用。
好问题。我已经写了一段时间复杂的KnockoutJS视图,直到我切换到

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


请参阅。

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

它为您解释了一些重构代码的好方法,这样就不会使html变得混乱,并使其更干净

我是否应该接受它的本质,而不是在实践中担心它

我的理解是,“低调”意味着一些不同的东西

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

我曾在其他项目中工作过,但情况并非如此,我们必须非常小心地使用诸如Knockout之类的框架。如果您在应用程序中非常依赖Knockout来完成核心功能,那么您的应用程序本身就很突出。这是否会困扰你取决于你的目标受众


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

与所选答案中建议的绑定提供程序相比,另一个选择是,它是“一个不引人注目的、基于约定的用于击出JS的绑定提供程序,可以将HTML和击出数据绑定完全分离”.

您可能还对我正在开发的一些嵌套功能感兴趣。你可以在这里看到pull请求:我在这里要简单一点,html5数据属性器中的一点元数据没有问题,你指的是什么?要添加第四层只是为了从html中提取一些元数据,data bind=“binding:value”几乎不是什么引人注目的javascript。当然,对于小型淘汰应用来说,这太过分了,但还有其他几个很好的理由。请看,这种方法有助于清理问题,但它并不能解决调试绑定错误的困难,也不能解决在构建更大的KO应用程序时可能会大量复制绑定代码的问题。我认为使用这种方法的唯一原因是在多个元素上重用一组绑定。但是,在一个单独的JS对象中指定每一个小绑定听起来非常麻烦,实际上会破坏MVVM的一些优势。它们是快速设置小块标记样式的最快方法,但它们不可维护。就像外部样式表一样,通过从html中删除淘汰绑定,您可以获得更好的可维护性。错过了您最后的评论。(获得了投票权,这就是我看到它的原因)我上面的库使您能够重用和分组绑定。你只需创建你自己的惯例,也请在你的答案中包含一个摘要(或者考虑把它作为评论),以防止链接腐烂使这个答案过时。