我在我的 Html 中使用以下淘汰脚本:
<!-- kno ifnot: bla -->
<tr><td>some stuff</td></tr>
<!-- /ko -->
我遇到的问题是,在执行绑定之前,这一行将显示一两秒钟。
我怎样才能防止这种情况发生?
我在我的 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
}
在测试期间,在应用绑定时,我添加了一个超时,以便我可以看到闪光灯。
setTimeout(function ()
{
ko.applyBindings(RR.VM);
}, 300);
用这样的方式包装你的 html -
<div id="hideme" style="display:none">
</div>
然后在您的 JavaScript 中,在您的应用绑定之后添加以下 jquery 行 -
$('#hideme').show();
这是我发现的最简单的方法。您可以使用一些淘汰赛绑定来做到这一点,但是您会失去保证的时间,因为您无法控制执行绑定的顺序。
我在这里找到的另一个解决方案
<div id="binding-start" style="visibility:hidden" data-bind="attr: { 'style': 'visibility:visible' }" />
这具有优点或缺点,具体取决于您的需要 - 将为隐藏的内容保留空间。应用绑定时页面不会“跳转”。