給定一個映射到knockout.js
和使用custom templates的數組,如何讓數組中的每個項目使用不同的模板呈現?Knockoutjs爲每個項目選擇一個自定義模板
這裏是一個鏈接到an example on jsFiddle所需的功能 - 有些人會希望它會。
簡單來說,給出一個數組是這樣的:
people: ko.observableArray([
{ name: 'Rod', age: 123, template: 'personItem' },
{ name: 'IBM', incorporated: 1911, template: 'corporateItem' },
])
怎麼能建立一個foreach:
結合使用的一些項目,以及爲他人不同的模板一個模板。
(注:我知道的是,使用下劃線模板有點合併了有關的問題,任何不必要的混亂表示歉意)
我曾經想過用一個模板,一組if
綁定 - 一個每個模板類型,像這樣:
<div data-bind='foreach: people'>
<div data-bind='if: people.template() == "personItem"'>
</div>
<div data-bind='if: people.template() == "corporateItem"'>
</div>
</div>
這似乎相當不雅,我懷疑(希望)有一個更優雅的和非常簡單的選擇。
任何想法將不勝感激&感謝您的閱讀。
太謝謝你了。這是一個很好的答案,也是一個很好的例子。 – 2012-08-16 03:25:36
這個問題的補充,我注意到,不能動態改變模板類型,就像在[this jsFiddle]中所期望的那樣(http://jsfiddle.net/bmh_ca/xF2xe/1/ - 我想知道這是否可能,或者是否必須移除並替換數組中的某個元素才能更改模板類型 – 2012-08-16 15:24:50
它實際上是在嘗試更改模板,但是在運行模板時遇到「合併」問題時會遇到問題。一個例子,我用模板中的'$ data.incorporated'替換它,因爲它將返回null而不是錯誤。http://jsfiddle.net/rniemeyer/xF2xe/2/ – 2012-08-16 17:18:04