演示链接: JsFiddle
创建2个模板和一个容器
<div id="container" ></div>
第一个负责渲染日期框:
<script id="datebox" type="text/x-jquery-tmpl">
...
</script>
第二个负责 7 天:
<script id="week" type="text/x-jquery-tmpl">
<div data-bind="template: { name : 'datebox' , foreach : dates }">
</script>
然后准备一个拆分日期数组的函数并应用这样的模板:
function splitDateArray() {
/** Splice observable Array 4 or 5 subArray depends on the month of year **/
var subArray_one /* contains 7 date */
var subArray_two /* contains 7 date */
var subArray_three /* contains 7 date */
var subArray_four /* contains 7 date */
var subArray_five /* contains 0-3 date */
/** Then create dynamic dom object and apply each array indivually to week template **/
var week1=$("<div id='w1'></div>");
$("#container").append(week1);
ko.applyBindingsToNode($("#w1").get(0) , { template: { name: 'week', data: subArray_one } });
... apply the same pattern for other arrays ...
ko.applyBindingsToNode($("#w2").get(0) , { template: { name: 'week', data: subArray_two } });
ko.applyBindingsToNode($("#w3").get(0) , { template: { name: 'week', data: subArray_three } });
ko.applyBindingsToNode($("#w4").get(0) , { template: { name: 'week', data: subArray_four } });
ko.applyBindingsToNode($("#w5").get(0) , { template: { name: 'week', data: subArray_five } });
}
概括 :
准备好数组后,使用 ko.applyBindingsToNode 函数呈现子模板。这是我的第一个想法。可以有更有效的解决方案。
编辑 :
这是一个没有细节的想法的简单实现:JsFiddle