0

私は、時間の経過とともに更新する必要があるフォームを使用して、オンライン フォーム システムに取り組んでいます。これを実現するために、Mapping プラグインと組み合わせて Knockout.js を使用していますが、うまく機能しています。

ただし、私が抱えている問題の 1 つは、データベースからロードされた JSON オブジェクトに含まれていないプロパティを ViewModel に保存することを拒否しているように見えることです。たとえば、DataBase に保存された ViewModel が次のようになっているとします。

var viewModel = {
    prop1: ko.observable(""),
    prop2: ko.observable(""),
    prop3: ko.observableArray()
};

「viewModel」変数をこのプロトタイプに初期化し、JSON データをサーバーからロードすると、ko.mapping.fromJSON(data, {}, viewModel);期待どおりに動作します。これが私の問題です。私のviewModelに次のような追加のプロパティがある場合:

var viewModel = {
    prop1: ko.observable(""),
    prop2: ko.observable(""),
    prop3: ko.observableArray(),
    prop4: ko.observableArray()
};

最初のプロトタイプに基づいて作成された JSON データを読み込むと、viewModel のこの 4 番目のプロパティにアクセスして、配列に追加および削除し、画面上で更新されたことを確認できますが、.xml を使用してデータベースに保存し直すことはできませんko.mapping.toJSON(viewModel)マッピング プラグインを使用してマッピングされた viewModel の部分に割り当てられる " ko _mapping_" プロパティと関係があることを収集しています。この状況が以前に対処されていた場合は申し訳ありませんが、答えが見つかりませんでした。

特定の要件は時間の経過とともにわずかに変化する可能性があるため、viewModel のプロトタイプを更新できるようにする必要があります。これは私のどのフォームでも発生する可能性があるため、一般的なソリューションは素晴らしいでしょう!

ありがとうございました。

4

1 に答える 1

0

Knockout マッピング プラグインは、フィードする JSON をモデル化するために必要なオブジェクトとオブザーバブルを自動的に作成します。そのため、通常は、ビュー モデルを処理するだけの方が簡単です。そのため、サーバー上にあるものを常に最新の状態に保つことができます。

var viewModel = function (data) {
    var model = ko.mapping.fromJS(data);

    // any custom observables not present in the JSON here

    return model;
}
于 2013-06-26T16:57:26.137 に答える