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 并使用 Mapping 插件。

预约:

 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 回答