Knockout JS:阻止divs绑定到可见:从屏幕上闪烁

sol*_*ald 24 jquery knockout-2.0 knockout.js

我正在开发一个单页应用程序,它有一堆隐藏的div,绑定(或绑定?)到KnockoutJS visible:.当页面加载时,它们都会在屏幕上瞬间闪烁.我已经尝试将我的JS移动到了<head></head>,但是没有效果,所以在页面底部加载JS并不是导致它的原因.

不幸的是,visible:绑定不会传播到CSS display属性,因此我不能display: none;在页面加载时使用,或visible:根本不能使用.除非......我加载页面display: none;然后在第一次向用户显示div时更改它.

但有没有更优雅的方式来实现这一目标?

Tua*_*uan 56

Wth KnockoutJS,我通过定义一个名为hiddenwith 的CSS类来解决这个问题display:none,然后我将添加这个类并绑定到闪存容器:

class="hidden" data-bind="css: { hidden: false }"
Run Code Online (Sandbox Code Playgroud)

  • 确实很漂亮.我对此做了一个小调整,用"ko-hidden"替换"隐藏",只是为了更多的上下文,并避免踩到现有的"隐藏"类:`class ="ko-hidden"data-bind ="css: {'ko-hidden':false}"` (5认同)
  • 值得注意的是,bootstrap 3有一个`.hidden`类.http://getbootstrap.com/css/#helper-classes-show-hide (5认同)

小智 5

我通过将我的"华丽"内容放在脚本模板中并使用ko的虚拟元素在另一个虚拟元素设置变量时加载模板来解决这个问题.

例如:

<!-- ko if: myVariable -->
<!-- ko template: { name: 'myTemplate' } --><!-- /ko -->
<script type="text/html" id="myTemplate">
    <ul data-bind="foreach: blah...">
        <li></li>
    </ul>
</script>
<!-- /ko -->
Run Code Online (Sandbox Code Playgroud)

因此,当设置myVariable时,将使用脚本容器的内容代替模板虚拟元素.使用这种方法你不会看到任何闪烁的内容:-)