在敲除js绑定的同时构建隐藏屏幕的最佳方法是什么?

Luc*_*Luc 76 javascript mvvm knockout.js

我是一个巨大的淘汰赛粉丝.我现在用它来进行我的所有网络开发,只是喜欢它.我无法弄清楚的一件事是如何在构建knockoutjs绑定时隐藏UI.

例如,我有一个非常强大的用户界面,我的页面上使用了很多模板.我注意到的问题是,当用户第一次访问页面时,他们会在绑定启动之前看到我的所有模板,并隐藏它们.

解决此问题的最佳方法是什么?我已经尝试使用辅助类来隐藏它们,但是除非我删除了辅助类引用(即ui-helper-hidden),否则模板不能使用'visible'和'if'绑定显示.

Jas*_*ore 194

我只是在谷歌这个,并在使用可观察的方式后,我想到了另一种方法:

<div style="display: none" data-bind="visible: true">
  <ul data-bind="foreach: items">
    <li data-bind="text: name"></li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

您不需要可观察对象,一旦数据绑定完成,可见总是会评估为true.

  • 谢谢!我应该补充一点,我刚刚将style/data-bind添加到我现有的div中,并且由于某种原因只隐藏了它的一部分.所以我添加了一个外部div.顺便说一下,我还在`<div data-bind ='visible:false'>屏幕加载... </ div>`之前添加了这个 (15认同)
  • 优秀!当你不想要额外的div时,还有一个优化:`<ul data-bind ="foreach:items,visible:true"> <li data-bind ="text:name"> </ li> </ UL>` (13认同)
  • 优秀!您还可以使用包含加载动画的div,其数据绑定为"visible:false". (3认同)

RP *_*yer 71

您可以在此处使用几种策略.

- 一种是将所有实际内容放入生活在脚本标签中的模板中(使用本机模板可以正常工作).在模板中,您可以使用控制流绑定.这就像:

<div data-bind="template: 'contentTmpl'"></div>

<script id="contentTmpl" type="text/html">
   <ul data-bind="foreach: items">
       <li data-bind="text: name"></li>
   </ul>
</script>
Run Code Online (Sandbox Code Playgroud)

- 另一种选择是style="display: none"在容器元素上使用一个visible绑定,该绑定可以绑定到一个loadedobservable,您true可以在应用绑定之后将observable更改为.

  • 我编写了答案来描述`loaded`观察点的工作方式.您需要在容器元素上添加`style ="display:none"`以及`visible:loaded`,然后在应用绑定后将其切换为true.`visible`绑定将删除`display:none`(它无法控制你的css中的内容). (4认同)