Javascript 更新映射的敲除对象的子部分

Javascript 更新映射的敲除对象的子部分,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我知道这个问题听起来很熟悉,但我读过很多类似的问题,没有找到我的具体情况 我有一个名为gds(GlobalDataStructure)的javascript对象。顾名思义,该对象包含我的项目的所有网页所需的所有信息,并存储在localStorage中(因此,我不只是更新视图模型,首先需要映射)。它包含通过AJAX读取的各种提要 我使用构造函数来创建gds。为了大规模简化这个结构,并希望使这个问题变得简单,让我们假设gds是 function gdStructure(){ this.las

我知道这个问题听起来很熟悉,但我读过很多类似的问题,没有找到我的具体情况

我有一个名为gds(GlobalDataStructure)的javascript对象。顾名思义,该对象包含我的项目的所有网页所需的所有信息,并存储在localStorage中(因此,我不只是更新视图模型,首先需要映射)。它包含通过AJAX读取的各种提要

我使用构造函数来创建gds。为了大规模简化这个结构,并希望使这个问题变得简单,让我们假设gds是

function gdStructure(){
    this.lastUpdate = new Date(2010,1,1);
    this.family = new Object();
    this.series = new Object();
    this.product = new Object();
}
所以我有

gds= new gdStructure();
然后,一旦我用来自初始提要的数据填充js数组,我将执行以下操作

    viewmodel = ko.mapping.fromJS(gds);
    ko.mapping.fromJS(gds,viewmodel);
然后,视图模型将绑定到每个页面

ko.applyBindings(viewmodel);
所以这一切都没问题。例如,当我获得一个新的家庭提要并希望更新该对象时,就会出现这个问题。我可以做到以下几点

gds.family=feed;
ko.mapping.fromJS(gds,viewmodel);
所有这些都可以正常工作,但这就是每次映射一个巨大的JS对象。这是非常缓慢,所以我需要找到一种方法,我可以更新刚刚改变的饲料。理想的情况是

ko.mapping.fromJS(gds.family, viewmodel.family);
但这似乎不起作用。也因为它是一个我不能做的东西

viewmodel.family(gds.family)
有人能帮我吗?我相信这一定很简单


期待您的光临。

我想您误解了lib的工作原理,这部分看起来很奇怪

viewmodel = ko.mapping.fromJS(gds);
ko.mapping.fromJS(gds,viewmodel);
您是否将定义用作数据

无论如何,我使用这样的ko.mapping(有点简化,但我想你明白了)


谢谢您的回复。当然,viewmodel=ko.mapping.fromJS(gds)创建了viewmodel数据结构,并将所有键设置为ko.observates,将数组设置为Knockout数组。这就是我理解它工作的方式??然后ko.mapping.fromJS(gds,Viewmodel)使用gds中的最新数据更新视图模型。这不对吗!否则,当数组结构变化巨大时,如何定义viewmodel?因此,首先映射的目的是什么?gds和viewmodel在代码中是同一个对象,实际数据是否出现在图片中?看看我的小提琴怎么做。有一个模型和数据,数据被读入提要并存储在GDS中。然后映射到Viewmodel。GDS不能是淘汰型viewmodel,因为它需要在localStorage中进行排序。如果我存储viewmodel,我将存储函数而不是数据。我知道它可以在存储之前转换回JS,但是由于这些数据是从feed动态更新的,我不想一直对整个viewmodel进行更新。每个feed都有很多变量和数组,结构非常复杂。因此,使用映射插件。您只需要将您想要的成员声明为可观察的。看看这把小提琴,我在数据中添加了另一个复杂对象,而没有在VM上为它添加成员,它会自动传输到视图模型。