2013-10-02 2 views
1

Когда я пытаюсь связать данные с помощью нокаута, когда pageload работает нормально. Но когда postback это вызывает ошибку «Вы не можете применять привязки несколько раз к одному и тому же элементу». а также данные, повторяющиеся неправильно.Проблема с 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")); 
>   } 
>  }); } 

ВИД:

> <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

Спасибо u Armand ......... за превосходный комментарий – user2838480

Смежные вопросы