knockout.js – 与子对象的KO映射问题

前端之家收集整理的这篇文章主要介绍了knockout.js – 与子对象的KO映射问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我从服务器获取以下数据:
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);

猜你在找的JavaScript相关文章