我有一个像
这样的视图模型AppViewModel = {
agent : ko.observableArray([ {
name : 'test',
age : '23'
}])
};
我的json数据就像
{"agent":[{"name":"john","age":"23"},{"name":"conor","age":"23"}]}
每3秒ajaxcall
我可以像[from 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"}]}
我希望将整个可观察的数组替换为新数据。
由于
修改
数据绑定:
<!-- 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 :(得分:0)
如果您在属性前加$data
特殊binding context属性,那么如果给定的属性不存在,KO将不会抱怨。
因此,如果您编写$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>
演示JSFiddle。