在KnockoutJS中,每次运行AJAX命令时,更新observableArray的JSON数据的正确方法是什么?
现在,我使用viewmodel.items([])之类的东西消隐数组,然后用来自服务器的JSON数据重新填充它。没有使用KnockoutJS映射插件(这可能是唯一的方法),正确的路径是什么?
我的服务器逻辑每次都会发送一些相同的数据,所以我不能只是迭代并将项目推送到数组中,除非我想要重复。
////添加我今天的表现////
我不知道为什么我这样做,但这就是我最初想出如何更新的方式。所以基本上,就像我之前说过的,我得到JSON数据,然后我把它传递给这样的东西:
_model.addIncident = function (json) {
var checked = json.UserTouches > 0 ? true : false;
_model.incidents.push({
id: ko.observable(json.IncidentIDString),
lastTouchId: ko.observable(json.UserLastTouchIDString),
weight: ko.observable(json.Weight),
title: ko.observable(json.Title),
checked: ko.observable(checked),
createdOn: ko.observable(json.IncidentCreatedOn),
servicename: ko.observable(json.Servicename),
inEdit: ko.observable(false),
incidentHistory: ko.observableArray(),
matchScore: ko.observable()
});
};
为JSON数组中的每个节点。正如您所看到的,我在那里有一些自定义的observable,可以使用每个传递的数据进行构建。也许这是错误的方法,但直到现在它还很有用。
答案 0 :(得分:10)
observableArray实际上只是一个普通的observable,带有一些额外的数组操作方法。
因此,如果要将observableArray的值设置为新数组,您可以这样做:
viewModel.items(myNewArray)
映射插件可以帮助您使用任何更新来更新阵列中的现有项目。在这种情况下,您的UI只会根据任何差异进行更新。
答案 1 :(得分:-1)
我知道我在这个问题上已经太迟了,因为我发现自己刚刚陷入这种状况。我们可以使用简单的Javascript util函数作为解决方法。
如果您已将_model.incidents
标记为observableArray
,则在绑定返回的JSON数据时可以执行以下操作:
eval("_model.incidents("+JSON.stringify(json)+");");
它对我有用。希望你已经创建了这样的observable:
_model.incidents = ko.observableArray([]);