2013-12-02 2 views
1

У меня есть ViewModel каккарту изменения данных JSON в наблюдаемом массиве

AppViewModel = { 
    agent : ko.observableArray([ { 
     name : 'test', 
     age : '23'    
    }])   
}; 

Мои данные JSon приходит как

{"agent":[{"name":"john","age":"23"},{"name":"conor","age":"23"}]} 

для ajaxcall каждые 3 сек

я мог бы в состоянии заменить наблюдаемым массив типа [от here]

success : function(responseData) { 
    var data = ko.toJS(responseData); 
    AppViewModel.agent(data.agent); 
} 

Несколько раз данные JSON приходит как

{"agent":[{"name":"john"}]} 

без возраста, в этом случае неполные данные остаются с наблюдаемым массивом

и получаю ошибку сценария как

'age' is undefined в привязки данных

даже после поступления нового ответа, как {"agent":[{"name":"john","age":"23"}]}

I хотите, чтобы весь obsevable массив заменялся новыми данными.

Благодаря

EDIT:

enter image description here

DataBinding:

<!-- ko foreach: agent--> 
    <tr>         
     <td style="font-weight:bold;" data-bind="text: name"></td>  
     <td style="font-weight:bold;" data-bind="text: age"></td> 
    </tr> 
<!-- /ko --> 
+0

Где вы можете получить ошибку в своем javascript или в процессе рендеринга? Можете ли вы опубликовать свое мнение? – Damien

+0

@Damien Я дал представление – user2779544

ответ

0

Если префикс вашей собственности с $data специальной binding context собственности, то КО не будет, если жаловаться данного свойства не существует ,

Так что, если вы пишете $data.age тогда вы не получите сообщение об ошибке, если сервер отправляет объект без age собственности:

<tr> 
    <td style="font-weight:bold;" data-bind="text: $data.name"></td> 
    <td style="font-weight:bold;" data-bind="text: $data.age"></td> 
</tr> 

Demo JSFiddle.

+0

Спасибо, это очень помогает. – user2779544

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