Can.js中似乎有幾種不同的方法可以做同樣的事情,這太棒了!但是其中一些方式的工作方式與其他方式稍有不同,並且可能會影響DOM如何呈現和更新。如果有人能澄清這個細微差別,我會很感激。Canjs - 迭代列表時何時使用哪個mustache標記?
我認爲這個選擇變得有趣的場景是當你想要一個默認文本或一個空列表的佔位符。
{{#if list}} and {{#if list.length}}
這些都是不一樣的。空數組和can.List都將渲染爲{{#if list}}
。
{{#each list}}
因此,使用我們與#if
了...
{{#if list.length}}
<ul>
{{#each list}}
<li>...<li>
{{/each}}
</ul>
{{else}}
<i>The list is empty.</i>
{{/if}}
{{#list}}
我認爲這旨在兩全其美的。今天我只想到,由於這是一個幫助程序,它支持{{else}}
。
{{#list}}
rendered for each item in list
{{else}}
rendered once if list is empty
{{/list}}
問題是,這不能產生我們用#each
做的html。
- 裹在
<ul>
標籤整個事情,它就會不顧渲染列表爲空或不 - 棒的
<ul>
標籤中的第一個塊(正塊?肯定?),它使每一次
所以實現似乎依賴於標記。很公平。
這是蹭。
據推測,#each
和#list
不同地更新DOM。來自#each
的文檔...
如果密鑰的值是can.List,則在列表更改時會更新生成的HTML。當列表發生變化時,只發生最小量的DOM元素變化。
因此,添加一個項目到列表中,只有該項目被渲染,刪除一個項目,只有該元素被刪除。 #list
的行爲沒有記錄,但我覺得它可能會重新渲染整個塊。
問題
哪一個最好?除了更簡潔之外,我不確定#list
有什麼優勢,那麼爲什麼作者建議它是首選呢?
[打開一個問題更清楚地記錄](https://github.com/bitovi/canjs/issues/1254) – ramblinjan 2014-11-12 04:47:07