use*_*018 11 javascript optimization knockout.js
我在寻找淘汰赛,如果还是可见的最佳做法,在这种情况下:
<div data-bind="visible: $root.obsVar()">
...
<input type="text" data-bind="value: $root.obsVar().someField" />
...
</div>
Run Code Online (Sandbox Code Playgroud)
如果$root.obsVar()未定义,将抛出错误.如果更改visible到if,问题会错过,但它需要的HTML重写.如果有很多murkup div,则需要花费很多时间.是否有任何理由改变$root.obsVar().someField对$root.getSomeFieldValue总是返回正确的值或未定义?或者也许还有其他技术不会增加开销并避免错误.
Dav*_*ret 12
这实际上取决于场景.来自文档:
if与visible绑定起着类似的作用.不同之处在于,visible包含的标记始终保留在DOM中并始终data-bind应用其属性 -visible绑定仅使用CSS来切换容器元素的可见性.的if结合,但是,物理添加或删除DOM中的所包含的标记,且仅当表达式为true适用绑定后裔.
在您的方案中,防止错误而不使用的唯一方法是if,当someField为null时,是沿着这些方向做某事:
data-bind="value: ($root.obsVar() == null) ? null : $root.obsVar().someField"
Run Code Online (Sandbox Code Playgroud)
每次访问一个属性时都必须编写,这真的很烦人.它使代码更难维护,并且更容易出错 - 特别是当你为一个obsVar属性添加一个新的绑定时,因为你必须记住做那个空检查.
除非您在使用visible情况时看到一些明显的性能优势,否则我的建议是使用,if因为您只需要在一个地方而不是多个地方写支票.