的KendoUI MVVM表一直在嘗試用KendoUI模板和MVVM創建類似於表的內容,像這樣的菜單:內容風格的菜單
Lesson 1:
- Slide 1
- Slide 2
Lesson 2:
- Slide 1
等。我有我創建了一個kendo.observable數據如下:
var CourseData = kendo.observable({
name: 'HTML Test Course',
lessons: [
{ // Lesson 1
name: 'Lesson 1',
slides: [
{ // Slide 1.1
name: 'Animation',
type: 'CreateJS',
cctext: '<p>...</p>',
}
]
}
]
});
之前發現KendoUI我建立使用普通的JavaScript菜單,對於給定的數據原來是這樣的:
<ul>
<li>
<span>Lesson 1</span>
<ul>
<li onclick="Shell.GoToSlide(1, 1)" class="unlocked"><!-- 0 = locked, 1 = unlocked, 2 = viewed, 3 = completed -->
<span>Animation</span>
</li>
</ul>
</li>
</ul>
我一起難以表達的這個難題的兩個部分是進度(由班級註明)和點擊事件。進度存儲在CourseData中的一個鋸齒狀陣列中(如CourseData.progress = [[3]],
,所以CourseData.progress[lesson][slide]
將給出該幻燈片的進度。)或者如果它能更好地解決這個難題,我會考慮將其移動到每個幻燈片對象(如CourseData.lessons[lesson].slides[slide].progress
)。點擊事件調用其他地方編寫的導航功能,使用他們的課程和幻燈片編號(基數1)調出幻燈片,如果進度被鎖定,則不會將其添加到該項目。
有了模板,我可以做類似如下:
<script type="text/x-kendo-template" id="coursemap-template">
# for (var l = 0; l < lessons.length; l++) { #
<li>
<span>#: lessons[l].name #</span>
<ul>
# for (var s = 0; s < lessons[l].slides.length; s++) { #
<li onclick="Shell.GoToSlide(#: s + 1 #, #: l + 1 #)"><span>#: lessons[l].slides[s].name #</span></li>
# } #
</ul>
</li>
# } #
</script>
爲了方便地訪問每節課和幻燈片的指標,但它不會讓我綁定到特定的數組中的元素例如:data-bind="attr: { class: progress[l][s] }"
當Kendo稍後評估此綁定時,它不知道l和s是什麼,我也不會想到一種將數字轉換爲適當字符串的優雅方法。如果我使用class="#: ['locked','unlocked','viewed','completed'][progress[l][s]] #"
它可以工作,但在進程更改時不會自動更新。如果我使用嵌套模板並取得進展,我可以將幻燈片的一個屬性綁定到它上面,但沒有問題,但我不知道如何獲取沒有大量indexOf調用或parent()的click事件的課程和幻燈片索引。parent )shenanigans。思考?