在这种情况下,我正在寻找淘汰或最佳实践:

<div data-bind="visible: $root.obsVar()">
    ...
    <input type="text" data-bind="value: $root.obsVar().someField" />
    ...
</div>

如果未定义$root.obsVar(),将引发错误。如果将visible更改为if,将不会出现问题,但是需要重写html。如果div中有很多murkup,那么将花费很多时间。是否有任何理由将$root.obsVar().someField更改为始终返回正确值或未定义的$root.getSomeFieldValue?也许还有其他技术不会增加开销并避免错误。

最佳答案

这实际上取决于情况。从docs:



在您的方案中,如果if为null,则不使用someField来防止错误的唯一方法是按照以下步骤进行操作:

data-bind="value: ($root.obsVar() == null) ? null : $root.obsVar().someField"

每次访问属性时都必须写,这确实很烦人。这使代码更难维护,并且更容易犯错误-特别是在向obsVar的属性添加新绑定(bind)时,因为您必须记住要执行空检查。

除非您发现在这种情况下使用visible可以带来明显的性能优势,否则我建议您使用if,因为这样一来,您只需要在一个地方而不是多个地方写支票即可。

关于javascript - knockout 最佳做法。如果或可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30087783/

10-12 12:18
查看更多