2

ビューにノックアウト付きのビューモデルがあるASPNET mvcサイトがあります。ビューに渡されたモデルをビューのビューモデルにシリアライズしようとしています。

モデルは、標準の aspnet mvc のようなものに渡されます

@model Client.Controllers.TripDto

そして、KOマッピングを使用して作成されたノックアウトビューモデルは次のように行われます

        var jsonModel = '@Html.Raw(JsonConvert.SerializeObject(this.Model))';
        var mvcModel = ko.mapping.fromJSON(jsonModel);
        var viewModel = new TripViewModel();
        var mapping = {
            'ignore': ["expenses"]
        };
        ko.mapping.fromJS(mvcModel, mapping, viewModel);

        ko.applyBindings(viewModel);

KO「カスタム」ビューモデルにプロパティ費用があります。問題は、このプロパティが MVC モデルになく、後でデータを取得するプロパティにすぎないことです。しかし、これまでのところ、エラーなしでモデルをビューモデルに渡すことができませんでした

エラー: バインディングを解析できません。メッセージ: ReferenceError: 経費が定義されていません。バインディング値: foreach: 費用 [このエラーで中断]

return new Function("$context", "$element", functionBody);

本当に失敗したのがマッピングであるかどうかは少しわかりませんが、これまでのところ、他の可能性のあるエラーは確認できません。

問題は、マッピング元のモデルにすべてのプロパティが存在しない場合に KO マッピングを使用することは可能ですか?

4

1 に答える 1

2

マッピング元のモデルにすべてのプロパティが存在しない KO マッピングを使用することはできますか?

KO マッピングはこれを気にしないと思いますが、モデルは気にします。KOを呼び出すko.applyBindingsと、HTML 要素に関連付けられたプロパティが検索されるため、HTML 要素でプロパティを使用する場合はdata-bind='id: property'、このプロパティが View-Model に存在する必要があります。ただし、null の場合は問題ありません。

ビューモデルを拡張する必要があるだけなので、次のexpensesようなデフォルト値を持つ新しいプロパティを含めますnull

var mapping = {
    create: function (options) {
        //customize at the root level.  
        var innerModel = ko.mapping.fromJS(options.data);

        innerModel.expenses= null;

        return innerModel;
    }
}

親切にこのSOの質問を確認してください

于 2013-08-11T15:39:44.843 に答える