1

この質問はおなじみのように聞こえますが、同様の質問をたくさん読んだので、自分の特定の状況を見つけることができませんでした.

gds (GlobalDataStructure) という JavaScript オブジェクトがあります。その名前が示すように、このオブジェクトには、プロジェクトのすべての Web ページに必要なすべての情報が含まれており、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)

誰でも私を助けることができますか?これはとてもシンプルに違いないと確信しています。

ありがとうございます。

4

1 に答える 1

0

ライブラリの仕組みを誤解していると思います。この部分は非常に奇妙に見えます

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

定義をデータとして使用していますか?

とにかく、私はこのように ko.mapping を使用します (少し単純化されていますが、要点はわかると思います)

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

于 2013-02-03T12:22:38.627 に答える