2013-10-02 143 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