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提供的语法。