2014-10-06 72 views
1

我正在制作一个网站,我正在使用KO JavaScript来显示登录和注册,如果用户没有登录或注销,如果用户登录。所有功能工作完美,但我的问题是,当页面加载它显示所有的分裂5秒,直到整个页面已正确加载,然后触发并插入正确的语句。这看起来不太好,我真的希望它立即执行,因为它影响我的用户界面。任何人帮助?KO 5秒延迟加载时运行我的UI

这是我的代码。

   <!--ko ifnot: Logged()--> 
        <a href="logged" class="ShowLogged">Log in</a> 
       <!--/ko--> 

       <!-- ko ifnot:Logged()--> 
        <a href="register" class="ShowRegister"> Register</a> 
       <!--/ko--> 

       <!-- ko if: Logged() --> 
        <a href="#" class="ShowLog" data-bind="click: Logged.Loggedout"> Log Out</a> 
       <!--/ko--> 

回答

1

您可以使用template结合来呈现部分:

<!-- ko template: { name: 'logged-links'} --> 
<!-- /ko --> 

<script id="logged-links" type="text/html"> 
    <!--ko ifnot: Logged()--> 
     <a href="logged" class="ShowLogged">Log in</a> 
     <a href="register" class="ShowRegister"> Register</a> 
    <!--/ko--> 

    <!-- ko if: Logged() --> 
     <a href="#" class="ShowLog" data-bind="click: Logged.Loggedout"> 
      Log Out 
     </a> 
    <!--/ko--> 
</script> 

时间元素之间由浏览器渲染和ko.applyBindings被称为(5秒你的情况),<!-- ko -->绑定被忽略,你的链接视为正常的html标记。

通过将这些链接放在<script>标记中,浏览器将不会呈现它们,但是一旦ko.applyBindings被调用,淘汰赛将执行。

+0

非常感谢!!把它整理出来!! – 2014-10-06 13:18:41

+0

另外,另一种方法是在主div或容器上添加一个显示属性,例如​​。这样,这个元素就会隐藏起来,直到绑定启动。对此,你将不得不在它自己的元素上添加样式属性。 – user1415567 2014-10-06 18:07:51

0

我会尝试将knockout.js放入标题中,以便在每次呈现之前加载它。

这应该在加载后不会在整个页面加载后立即执行逻辑。

+0

是的,但我有很多淘汰赛在整个我的网站,我宁愿一种方式,我可以做的地方,将停止这种情况发生..感谢无论如何输入。 – 2014-10-06 12:57:11

+0

我的意思是把''放在''之前。试试看。 – Romeo 2014-10-06 12:59:41

+0

还没有它:( – 2014-10-06 13:13:25