1

次のような複雑なビュー モデルがあります。

    function DiaryBundleViewModel() {
        var self = this;

        self.existingJobSearchViewModel = new ExistingJobSearchViewModel(self);

        self.DiaryBundle = ko.observable();
        self.Appointment = ko.observable();
...

次のように、ビュー モデルを UI にバインドしました。

var vm = new DiaryBundleViewModel();
ko.applyBindings(vm);

私のビュー モデルには、サーバーから予定を取得する関数があります。

サーバーから結果が返ってきたら、次のようにします。

self.Appointment(result);

予定を示すフィールドで UI が更新されます。

ただし、Appointment 自体のみが ko.observable です。私の Appointment オブジェクトには、UI で変更を加えたい相互に関連するプロパティがあります。したがって、ko.mapping プラグインが必要です。

ただし、この場合の使用方法に苦労しています。

私がこれを行う場合:

self.Appointment = ko.mapping.fromJS(result);

UI は既に self.Appointment にバインドされているため、機能しません。それを上書きしたので、変更は表示されません。

だから、私は試しました:

ko.mapping.fromJS(result, self.Appointment);

しかし、それもうまくいきません。

私は何が欠けていますか?

4

1 に答える 1

2

まず、AppointmentVmを作成する必要があり、そこでマッピングプラグインを使用します。

予定:

 var AppointmentVm= function(data) {
    ko.mapping.fromJS(data, { }, this);
};

そして、あなたが使用するメインビューモデル:

ko.mapping.fromJS(data, {
        'Appointments': {
            create: function(options) {
                return new AppointmentVm(options.data);
            }
        }
    },this);

これは、子オブジェクトをマップします。

于 2012-09-12T22:48:04.303 に答える