Javascript Knockout.js:更新使用映射插件加载的对象
我想呈现一个包含服务器发送给我的对象列表的表。我目前正在这样做:Javascript Knockout.js:更新使用映射插件加载的对象,javascript,knockout.js,Javascript,Knockout.js,我想呈现一个包含服务器发送给我的对象列表的表。我目前正在这样做: 身份证件 名称 地位 以及Knockout.js绑定部分: var-mappedData=komapping.fromJSON('{{{services}}'); ko.applyBindings({services:mappedData}); services是一个包含JSON数据的变量,整个页面用手柄呈现。到现在为止,一直都还不错。我能够呈现表中接收到的数据 现在的问题是:我希望收到一个通知,告诉我服务的状态已经更改,并
身份证件
名称
地位
以及Knockout.js绑定部分:
var-mappedData=komapping.fromJSON('{{{services}}');
ko.applyBindings({services:mappedData});
services
是一个包含JSON数据的变量,整个页面用手柄呈现。到现在为止,一直都还不错。我能够呈现表中接收到的数据
现在的问题是:我希望收到一个通知,告诉我服务的状态已经更改,并更新mappedData中相应的对象问题是mappedData看起来非常不透明,我无法检索对象并根据其id对其进行更新
谢谢你的帮助 要获取对象,您可以编写一个helper函数来为您检索服务对象。您可以这样做(假设mappedData是observableArray和id observable):
函数按服务id获取服务(服务id){
对于(var i=0;i要获取对象,您可以编写一个helper函数来为您检索服务对象。您可以这样做(假设mappedData是一个observableArray和id observable):
函数按服务id获取服务(服务id){
对于(var i=0;i您的mappedData
变量,此时将是一个敲除数组,其中包含一组包含敲除观测值的对象
因此,您所要做的就是更改数组中正确对象的可观察状态
function updateServiceStatus(id, status) {
var service = mappedData().filter(function(e) { return e.id() == id; });
if (service.length) {
service[0].status(status);
}
}
此时,您的mappedData
变量将是一个敲除数组,其中包含一组包含敲除观测值的对象
因此,您所要做的就是更改数组中正确对象的可观察状态
function updateServiceStatus(id, status) {
var service = mappedData().filter(function(e) { return e.id() == id; });
if (service.length) {
service[0].status(status);
}
}
状态是如何更新的?状态是如何更新的?谢谢Richard,这是有效的。我不知道为什么我必须调用mappedData()
object,然后再对其进行筛选。KO文档在这个主题上似乎有点单薄。-它包含了可以直接在ObservalArray上调用的所有属性的列表。filter不是其中之一,因为结果可以根据数组的内容进行更改(例如,它不会更新计算结果)。您需要调用mappedData()
来解析可观测的数组值,然后在普通JS数组上调用filter(…)
。谢谢Richard,这很有效。我不确定为什么必须调用mappedData()
object,然后再对其进行筛选。KO文档在这个主题上似乎有点单薄。-它包含了可以直接在ObservalArray上调用的所有属性的列表。filter不是其中之一,因为结果可以根据数组的内容进行更改(例如,它不会更新计算结果)。您需要调用mappedData()
从可观察对象解析数组值,然后调用filter(…)
在普通JS数组上。嗨,Bogdig,谢谢你的回复。你的解决方案很有效,尽管我比较喜欢Richard提供的语法。嗨,Bogdig,谢谢你的回复。你的解决方案很有效,尽管我比较喜欢Richard提供的语法。