Knockout映射到子对象

时间:2014-04-24 18:17:09

标签: data-binding knockout.js knockout-mapping-plugin

我试图将JSON数据映射到子对象,我可以使用根对象使其工作:

var data = {transfer: {"VisitTransferId":"a46bb9ce-9feb-410b-b643-d917560bb6e5","FromVisit":"16*15997*2*2","ToVisit":"10*1*9*9*9"}}; ko.mapping.fromJS(data, {}, visitDetailsVm);

就像在这个JSFiddle here中一样,但是我想知道为什么在进行映射时指定子对象时它不起作用(这两者之间的数据不一样) :

var data = {"VisitTransferId":"a46bb9ce-9feb-410b-b643-d917560bb6e5","FromVisit":"16*15997*2*2","ToVisit":"10*1*9*9*9"}; ko.mapping.fromJS(data, {}, visitDetailsVm.transfer);

喜欢here

1 个答案:

答案 0 :(得分:1)

当您运行映射并提供变量来接收数据时,您实际上正在设置变量的值...不填充observable。因此,您完全覆盖了观察者。

查看http://jsfiddle.net/BWgwt/3/

        var visitDetailsVm = new VisitDetails();
        visitDetailsVm.transfer(ko.mapping.fromJS(data));

        var mappedAmas = ko.utils.arrayMap(amadata, function(ama) {
            return ko.mapping.fromJS(ama);
        });
        visitDetailsVm.amas(mappedAmas);

使用可观察数组,您实际上想要映射数据数组中的每个实例,然后使用映射结果填充可观察数组。