2013-03-05 25 views
4

我現在的模板是類似以下內容:是否已移除虛擬元素內淘汰賽重新評估

<!-- ko 'if': condition --> 
    <ul data-bind="foreach: items"> 
     ... 
    </ul> 
<!-- /ko --> 

<!-- ko ifnot: condition --> 
    <ul data-bind="foreach: items"> 
     ... 
    </ul> 
<!-- /ko --> 

是否有意義改變成以下

<ul data-bind="foreach: items"> 
    <!-- ko 'if': $parent.condition --> 
     ... 
    <!-- /ko --> 

    <!-- ko ifnot: $parent.condition --> 
     ... 
    <!-- /ko --> 
</ul> 

我的實際使用情況同時擁有一個列表視圖和一個網格視圖 - 因爲他們的doms不同,我不能只交換父代ul區塊上的某些類。

我想知道哪種方法更好?

回答

1

我認爲您的原始方法可能更可取,因爲評估每個項目的ififnot綁定(其中包括將子元素保存爲「模板」)的開銷較小。

+0

Thx,這很好,因爲第一個更容易跟蹤。只是想知道是否有一種簡單的方法來查看綁定是否被觸發(ko的調試版本),那麼我們可以肯定虛擬元素在觸發/更新之前刪除第二個foreach。 – bitinn 2013-03-05 14:46:25

+0

一個'if'或'ifnot'根本不會試圖綁定這些孩子,所以內部'foreach'不會被運行或者已經收集到任何依賴。 – 2013-03-05 14:48:37

+0

測試它的一個有趣的方法可能是將'afterRender'參數添加到'foreach'循環中,只需測試並確認已刪除的'foreach'綁定不會觸發。 – bitinn 2013-03-05 15:12:00