将变量json数据映射到可观察数组

时间:2013-12-02 13:54:04

标签: javascript knockout.js ko.observablearray

我有一个像

这样的视图模型
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"}]}

之后也是如此

我希望将整个可观察的数组替换为新数据。

由于

修改

enter image description here

数据绑定:

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

1 个答案:

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