如何在敲除绑定执行前防止Html显示

我在我的Html中使用下面的敲除脚本:

<!-- kno ifnot: bla --> <tr><td>some stuff</td></tr> <!-- /ko --> 

我遇到的问题是,绑定执行之前,这一行将显示一两秒钟。

我怎样才能防止这种情况发生?

这是一个简单的技巧。 只要最初隐藏你的根元素,并将可见的绑定设置为true。

 <div style="display: none;" data-bind="visible: true"> <!-- the rest of your stuff --> </div> 

当它被渲染,淘汰赛之前做它的事情,它将被初步隐藏。 当应用绑定时,淘汰赛将覆盖样式并使其可见。


或者,您可以将视图放入脚本块,并通过模板实例化它。 脚本块将不会被渲染,但在挖空渲染模板时将会显示。

 <!-- ko template: 'myView' --><!-- /ko --> <script id="myView" type="text/html"> <!-- the rest of your stuff --> </script> 

由于你想要的行为经常是不同的页面 – 这是我在我的布局/模板文件(ASP.NET)中做的。

  <div class="ko-unbound" data-bind="css: { 'ko-unbound': false, 'ko-bound': true }"> @RenderBody() </div> 

当页面被绑定时:

  • ko-unbound类从页面中删除(最初添加了class属性)。
  • ko-bound类被添加到页面。

然后在一个页面,不需要的内容是一个问题,我可以自定义CSS来显示或隐藏基于这两个类的东西。 我也使用这种技术来显示一个“加载”的图像,或者可能强加一个元素的最小高度。

 .ko-unbound #storeWizard { display: none; // hide entire section when the page is binding } .ko-bound #loadingGraphic { display: none; // hide loading graphic after page is bound } 

在testing期间,当应用绑定时,我添加一个超时,所以我可以看到闪光灯。

  setTimeout(function () { ko.applyBindings(RR.VM); }, 300); 

用这样的东西包装你的html –

 <div id="hideme" style="display:none"> </div> 

然后在你的JavaScript中,在应用绑定之后添加下面的jquery行 –

 $('#hideme').show(); 

这是我发现的最简单的方法。 你可以用一些敲除绑定来做到这一点,但是你失去了保证的时间,因为你不能控制命令绑定的执行。

另一个解决scheme,我在这里find

 <div id="binding-start" style="visibility:hidden" data-bind="attr: { 'style': 'visibility:visible' }" /> 

根据您的需要,这具有优势 – 或不利因素 – 将为隐藏的内容保留空间。 应用绑定时,页面不会“跳转”。