首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >淘汰最佳做法。如果或可见

淘汰最佳做法。如果或可见
EN

Stack Overflow用户
提问于 2015-05-06 21:22:20
回答 4查看 8K关注 0票数 14

在本例中,我正在寻找淘汰赛是否或可见的最佳实践:

代码语言:javascript
复制
<div data-bind="visible: $root.obsVar()">
    ...
    <input type="text" data-bind="value: $root.obsVar().someField" />
    ...
</div>

如果$root.obsVar()未定义,则会引发错误。如果您将visible更改为if,那么问题将失败,但它需要重写html。如果在div中出现了大量的模糊,这需要大量的时间。是否有任何理由将$root.obsVar().someField更改为总是返回正确值或未定义的$root.getSomeFieldValue?或者,也许还有其他一些技术可以避免开销和避免错误。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-06 21:44:09

这取决于实际情况。来自文档

if扮演着与visible绑定类似的角色。区别在于,对于visible,包含的标记始终保留在DOM中,并且始终应用其data-bind属性-- visible绑定只是使用CSS来切换容器元素的可见性。然而,if绑定物理上添加或删除了DOM中包含的标记,并且仅在表达式为真的情况下将绑定应用于后代。

在您的场景中,当if为null时,防止错误不使用someField的唯一方法是执行以下操作:

代码语言:javascript
复制
data-bind="value: ($root.obsVar() == null) ? null : $root.obsVar().someField"

每次访问属性时都必须编写,这真的很烦人。它使代码更难维护,并且更容易出错--尤其是当您向obsVar的属性添加新绑定时,因为您必须记住执行空检查。

除非您看到在您的情况下使用visible会带来一些明显的性能好处,否则我建议使用if,因为这样您只需要在一个地方而不是多个地方写支票。

票数 17
EN

Stack Overflow用户

发布于 2017-06-19 14:41:12

你可能会发现你需要两者兼用。

使用if从DOM中删除标记--防止可能的JS错误,这样就不会占用页面上的空间。

然后使用visible隐藏元素,直到页面完全加载。

代码语言:javascript
复制
<!-- ko if: whatever -->
<div data-bind="visible: true" style="display: none">
    my content
</div>
<!-- /ko -->
票数 2
EN

Stack Overflow用户

发布于 2015-05-06 21:28:54

尝试使用没有()的$root.obsVar。这应该适用于如果或可见的话。两者的区别在于,“可视”只是隐藏div,这个div仍将存在于DOM中,而"if“则将其排除在DOM之外。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30087783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档