2013-10-02 106 views
1

当我尝试使用淘汰赛时,页面加载数据工作正常时绑定数据。但是,当回发它时会抛出一个错误“你不能多次绑定到同一个元素。”还有数据重复错误的方式。DataBinding与淘汰赛问题

脚本和视图如下所示。从控制器返回所需的视图模型。

PLZ帮我解决这个问题..

SCRIPT:

> var dataCollection = ko.observableArray(); 
> 
> function loadShiftSummary() { 
>  ko.cleanNode($("#shiftInfo")); 
>  $.ajax({ 
>   url: 'testurl', 
>   type: 'post', 
>   contentType: 'application/json', 
>   success: function (data) {   
>  
>    dataCollection = ko.mapping.fromJS(data.rosterViewModels); 
>    ko.applyBindings(dataCollection, document.getElementById("shiftInfo")); 
>   } 
>  }); } 

VIEW:

> <tbody data-bind="foreach: dataCollection"> 
>   <tr> 
>    <td data-bind="text: Description"></td> 
>   
>    @for (int i= 0; date < 30; i++) 
>    { 
>     <td data-bind="text: $data.CountArray()[@i]"></td> 
>    } 
>   </tr> 
> </tbody> 

感谢

回答

1

这样做的原因是,是,是ko.applyBindings(dataCollection, document.getElementById("shiftInfo"));不止一次地呼叫。

我建议什么是您的文档准备把这个

ko.applyBindings(dataCollection, document.getElementById("shiftInfo")); 

,并从功能删除

function loadShiftSummary() { 

    $.ajax({ 
     url: 'testurl', 
     type: 'post', 
     contentType: 'application/json', 
     success: function (data) {   

      dataCollection(ko.utils.unwrapObservable(ko.mapping.fromJS(data.rosterViewModels))); 

     } 
    }); 
} 

ko.applyBindings不应该被称为比每页一次/节

+1

这段代码dataCollection = ko.mapping.fromJS(data.rosterViewModels);应该是dataCollection(ko.mapping.fromJS(data.rosterViewModels)),否则dataCollection将引用新的数组,并且ui将引用不同的数组,因此数据将不会在ui中更新。 –

+0

@DhanaKrishnasamy是的,你是正确的,我错过了那部分,现在更新代码,我通常也会在那个位置添加'ko.utils.unwrapObservable' – Armand

+0

谢谢你Armand ......... for superb comment – user2838480