KO映射问题与子对象
我从服务器获取以下数据:
var data = [{ id: 0, child: { prop1 : 'a', prop2 : 'b' } } //Child object has data
,{ id: 0, child: null } ]; // Child object is null
在使用挖空映射插件映射数据后,我遇到了一些问题。 问题是内部child
对象不是相同的类型。
执行此操作后:
ko.mapping.fromJS(data, viewModel.data);
我得到第一个对象有一个类型为Object
的child
属性和数据。 然而第二个对象有一个Observable
类型的属性child
类,当它被解包时返回null。
在两种情况下,我怎样才能使这些对象具有相同的类型,即使一个有值而另一个为空。 改变服务器的行为方式不是一种选择。 我期望有Object
和null
或两个Observables
。
JsFiddle在这里。
您需要使用create
选项来告诉映射插件如何映射您的child
属性。
所以,如果你想拥有具有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, mappingOptions, viewModel.data);
如前所述,解决方案是映射选项,但要确保始终测试options.data为null值 ,然后返回空ko.observable(),否则绑定会遇到很多麻烦! 我花了很多时间找到这个问题。
var mappingOptions = {
child: {
create: function (options) {
return options.data != null ? ko.observable(ko.mapping.fromJS(options.data)) : ko.observable();
}
}
}
链接地址: http://www.djcxy.com/p/74129.html