我在HTML中使用以下敲除脚本:
<!-- kno ifnot: bla -->
<tr><td>some stuff</td></tr>
<!-- /ko -->
我的问题是在执行绑定之前,该行将显示一两秒钟。
如何防止这种情况发生?
Answers:
这是一个简单的把戏。只需将您的根元素初始隐藏,然后将可见绑定设置为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>
d-none
。
display: none
。(背景:因为通过淘汰赛类样式隐藏元素不起作用删除了display
。通过结合将这个元素可见时,内联的风格,那么你的类风格将接管并永远隐藏的元素。)
由于您想要的行为通常随页面而变化-这就是我在布局/模板文件(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
}
在测试期间,当应用绑定时,我添加了一个超时,以便可以看到闪存。
setTimeout(function ()
{
ko.applyBindings(RR.VM);
}, 300);
我在这里找到的另一种解决方案
<div id="binding-start" style="visibility:hidden" data-bind="attr: { 'style': 'visibility:visible' }" />
根据您的需要,这具有优点(或缺点)–将为隐藏的内容保留空间。应用绑定后,该页面不会“跳转”。