我有一个像这样的复杂视图模型:
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。
但是,只有约会本身是一个ko.observable。我的Appointment对象上有相互关联的属性,我想在UI中触发更改。所以,我需要ko.mapping插件。
但是,在这种情况下,我正在努力使用它。
如果我这样做:
self.Appointment = ko.mapping.fromJS(result);
它不起作用,因为UI已经绑定到self.Appointment,我刚刚覆盖了它,所以它不会看到更改。
所以,我试过了:
ko.mapping.fromJS(result, self.Appointment);
但这也不起作用。
我错过了什么?
答案 0 :(得分: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);
这映射了子对象。