Javascript 剑道模板源绑定数组创建双条目

Javascript 剑道模板源绑定数组创建双条目,javascript,jquery,kendo-ui,kendo-mvvm,kendo-template,Javascript,Jquery,Kendo Ui,Kendo Mvvm,Kendo Template,我使用一个带有数组的剑道模板来动态地将行添加到表单中,但是,当我将一个项目推到数组中时,它会添加两行,两行都绑定到MVVM中的同一数据对象(因此,对于两个对象,有四行)。我用调试器运行了这个页面模板中的行,如怀疑的那样,它在完成之前命中两次 更奇怪的是,它以顺序呈现行,然后以相反的顺序呈现行,因此如果我对第一行进行更改,它会对最后一行进行相同的更改(因为它们绑定到数组中的同一对象),等等 HTML 以下是表单所在的HTML(可观察对象classInfo已绑定到标记,因此数据绑定中缺少该对象)

我使用一个带有数组的剑道模板来动态地将行添加到表单中,但是,当我将一个项目推到数组中时,它会添加两行,两行都绑定到MVVM中的同一数据对象(因此,对于两个对象,有四行)。我用
调试器运行了这个页面模板中的行,如怀疑的那样,它在完成之前命中两次

更奇怪的是,它以顺序呈现行,然后以相反的顺序呈现行,因此如果我对第一行进行更改,它会对最后一行进行相同的更改(因为它们绑定到数组中的同一对象),等等


HTML 以下是表单所在的HTML(可观察对象
classInfo
已绑定到
标记,因此数据绑定中缺少该对象):


Javascript推送函数 还有一个
addDate()
函数,用于将新项推送到数组中:

function addDate() {
    classModel.get("classInfo.ClassDates").push({
        "ClassType": "Type 1",
        "DateStart": null,
        "DateStop": null
    });

    //change inputs to DatePickers

    //change select to DropDownList
}


我尝试过在不创建DropDownList和DatePicker的情况下运行它,使用基本的HTML元素,但结果相同。任何帮助都将不胜感激。

因此,我不确定为什么会发生这种情况(需要进行一些研究),但问题的原因是我的绑定。显然,剑道模板不喜欢绑定到属于其他对象的对象数组,就像我在
classInfo.ClassDates
中所做的那样

我更改了以下绑定:

kendo.bind($('addClassWindow'),
classModel

致:

kendo.bind($('addClassWindow'),
classModel.classInfo

现在它工作得很好。不管什么原因

<script id='classDateTemplate' type='text/kendo-ui-template'>
    <p>
        <select class="classDateTypeDropdown">
            <option><!-- TYPE 1 --></option>
            <option><!-- TYPE 2 --></option>
            <option><!-- TYPE 3 --></option>
            <option><!-- TYPE 4 --></option>
        </select>
        <input class="classDatePicker" data-bind="value: DateStart" style="width: 125px;" /> to 
        <input class="classDatePicker" data-bind="value: DateStop" style="width: 125px;" />        
    </p>
</script>
 var classModel = new kendo.observable({
  classInfo: {

    //.....

    ClassDates: [],

    //.....
    }
});
function addDate() {
    classModel.get("classInfo.ClassDates").push({
        "ClassType": "Type 1",
        "DateStart": null,
        "DateStop": null
    });

    //change inputs to DatePickers

    //change select to DropDownList
}