【问题标题】:Update subsection of mapped knockout object更新映射剔除对象的小节
【发布时间】:2013-02-03 11:03:35
【问题描述】:

我知道这个问题听起来很熟悉,但是我已经阅读了很多类似的问题,并且无法找到我的具体情况。

我有一个名为 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);

一切都可以正常工作,但每次都映射一个 MASSIVE JS 对象。这非常慢,因此我需要找到一种方法来仅更新已更改的提要。理想情况下是这样的..

ko.mapping.fromJS(gds.family, viewmodel.family);

但这似乎不起作用。也因为它是一个我不能做的对象。

viewmodel.family(gds.family)

有人可以帮我吗?我相信这一定很简单。

感谢期待。

【问题讨论】:

    标签: javascript knockout.js knockout-mapping-plugin


    【解决方案1】:

    我想你误解了lib是如何工作的,这部分看起来很奇怪

    viewmodel = ko.mapping.fromJS(gds);
    ko.mapping.fromJS(gds,viewmodel);
    

    您将定义用作数据?

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

    http://jsfiddle.net/QtyGd/1/

    【讨论】:

    • 感谢您的回复。 viewmodel = ko.mapping.fromJS(gds) 创建 viewmodel 数据结构并将所有键设置为 ko.observables 并将 Arrays 设置为 Knockout Arrays。这就是我理解它的工作方式?然后 ko.mapping.fromJS(gds,Viewmodel) 用 gds 中的最新数据更新视图模型。这不正确吗!否则,您如何定义视图模型,因为阵列结构变化很大并且很大,因此首先要进行映射?
    • gds 和 viewmodel 在您的代码中是同一个对象,实际数据是否显示出来?看看我的小提琴怎么做。有模型和数据
    • 数据被读入提要并存储在 GDS 中。然后将其映射到 Viewmodel。 GDS 不能是淘汰视图模型,因为它需要在 localStorage 中排序。如果我存储视图模型,我将存储函数而不是数据。我知道它可以在存储之前转换回 JS,但是由于这些数据是从提要动态更新的,我不想一直对整个视图模型这样做。
    • 每个提要都有许多变量和数组,结构非常复杂。因此使用映射插件。
    • 您只需要具体声明您希望拥有的成员为可观察的。看看这个小提琴,我在数据中添加了另一个复杂对象,而没有在 VM 上为其添加成员,它会自动转移到视图模型。 jsfiddle.net/QtyGd/2
    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多