2015-10-01 27 views
1

我想基於一些屬性使用Knockout.js顯示/隱藏html元素,但我得到的是閃爍。獨立於屬性值,所有元素都在加載時顯示,並且其中一些元素隱藏起來。Knockout.js如果僅在加載後才起作用。爲什麼?

這裏是我的腳本:

<li class="page-scroll" data-bind="if: !loggedIn()"> 
        @Html.ActionLink(@ViewRes.SharedStrings.login, "User", "Home") 
       </li> 

    <li class="page-scroll" data-bind="if: loggedIn()"> 
        <a href="#" data-bind="text: user().name, click: user().manage"> 
        </a> 
       </li> 

的問題是如何使淘汰賽insted的增加DOM的所有元素,並hidding之後他們,而不是將它們添加在所有。我甚至試過這個腳本:

<li class="page-scroll" data-bind="if: false">       
        <a href="#" data-bind="click: user().manage" 
         style=" background: url(/Content/img/vahagn.jpg) no-repeat center left; background-size: contain; border-radius: 30px; width: 60px; height: 60px; margin-left: 25px;"> 
        </a>                      
       </li> 

這個元素也顯示在加載的過程中。 我想這句法太

<!-- ko if: loggedIn()--> 
my elements 
<!-- /ko --> 

在這種情況下發生同樣的情況。

任何解決方案?

+1

淘汰賽綁定顯然無法工作如果尚未加載。爲了消除閃爍,你必須手動隱藏條件元素,讓它在加載後處理可見性 – dfperry

+0

感謝dperry的答案,但在這種情況下我也會閃爍。現在,我的所有元素都在加載過程中隱藏起來,並在加載後顯示出其中一些元素在我的情況下,這個元素是菜單按鈕,閃爍是真正可見的。 –

+1

我會向具有'display:none'作爲主要屬性的元素添加一個類,然後在'if'旁邊添加'visible'綁定。當頁面出現時,淘汰賽相關物品將被隱藏,然後在淘汰賽加載/準備好後開啓。應該不閃爍。 – dfperry

回答

2

將一個類添加到所有具有數據綁定元素的容器。喜歡的東西...

hide-unbound

這具有的風格:display: none

接着,在ko.applyBindings(new MyViewModel());呼叫類似...

$(".hide-unbound").removeClass("hide-unbound");

相關問題