2014-10-06 39 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