我从服务器获取以下数据:
var data = [{ id: 0,child: { prop1 : 'a',prop2 : 'b' } } //Child object has data,{ id: 0,child: null } ]; // Child object is null
使用knockout映射插件映射数据后,我遇到了一些问题.问题是内部子对象的类型不同.
执行此操作后:
ko.mapping.fromJS(data,viewmodel.data);
我得到第一个对象有一个Object类型的子属性与数据.但是,第二个对象有一个Observable类型的属性子,当它被解包时返回null.
在两种情况下,如果对象具有相同的类型,即使一个具有值,另一个为null,我该怎么做.无法更改服务器的行为方式.我希望有Object和null或两个Observable.
JsFiddle here.
解决方法
您需要使用
create
option来告诉映射插件它应该如何映射您的子属性.
因此,如果您希望拥有Object和null,则需要在子属性为null时返回null:
var mappingOptions = { child: { create: function(options) { if (!options.data) return null; return ko.mapping.fromJS(options.data); } } } ko.mapping.fromJS(data,mappingOptions,viewmodel.data);
演示JSFiddle.
或者如果你想要它们两个Observables:
var mappingOptions = { child: { create: function(options) { return ko.observable(ko.mapping.fromJS(options.data)); } } } ko.mapping.fromJS(data,viewmodel.data);