【发布时间】:2014-07-13 21:07:57
【问题描述】:
在针对类似但不同的数据发出第二次 AJAX 请求后,我无法弄清楚如何添加到预先存在的 observableArray。
我的第一个 JSON 请求不包含名为 value 的类型,所以我需要添加它。我最初的 JSON 结构:
[{"statusmsg":"OK","data":{"status":"stopped"},"sender":"hostname","statuscode":0}]
发出第二个 AJAX 请求,从 REST 服务器获取服务的正常运行时间:
[{"statusmsg":"OK","data":{"value":"","fact":"some_fact"},"sender":"hostname","statuscode":0}
我想向嵌套对象data 添加类型value,其中包含some_fact。
我尝试了以下方法:
ko.utils.arrayForEach(self.rows(), function(row) {
ko.utils.arrayForEach(self.timeRows, function(time) {
if(row.sender() == time.sender()) {
self.rows()[0].data.push({value: time.data.value()});
}
});
});
注意:我使用占位符索引 0 仅用于测试。理想情况下,我只想根据主机名找到匹配项并更新observableArray。
当这段代码执行时,我收到了错误
TypeError: self.rows(...)[0].data.push 不是函数
我也尝试在data 旁边加上括号,比如data().push,但这也不起作用。
目的是为原始observableArray 添加一个新值,称为rows,以便我可以使用新信息更新我的视图。
【问题讨论】:
-
取决于您如何在视图模型中定义
rows。它只是包装在 ko.observableArray() 中的简单 JS 对象数组吗?您是否对从服务器收到的数据使用了 ko.mapping.fromJSON() 或 ko.mapping.fromJS()?您是否制作了自己的自定义模型来查看模型映射? -
@Sybeus:我使用了 ko.mapping.fromJSON。我没有制作定制模型。只有一个 ViewModel
标签: ajax knockout.js ko.observablearray