Javascript 如果要将子对象添加到已映射的淘汰视图模型中,如何对此调用ko.mapping?

Javascript 如果要将子对象添加到已映射的淘汰视图模型中,如何对此调用ko.mapping?,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我有一个任务对象,它有一个可观察的部件对象: function Mission(mission) { koMapping.fromJS(mission, { 'parts': { create: function(options) { return new Part(options.data); } } }

我有一个任务对象,它有一个可观察的部件对象:

    function Mission(mission) {
        koMapping.fromJS(mission, {
            'parts': {
                create: function(options) {
                    return new Part(options.data);
                }
            }
        }, this);

        /* PARTS */
        this.parts = ko.observableArray([]);
    }

    function Part(part) {
        koMapping.fromJS(part, {
            include: ['a bunch of properties']
        }, this);
        var p = this;

        // Computed properties and such like here
    }
我的任务对象在我的全局ViewModel上存储为self.Mission=ko.observatenew任务

我还有一个addPart函数,需要一些帮助:

addPart = function() {
    // How do I push a new Part() object to the parts array on the mission here?
}
我想知道的是,如何使用knockout的mapping插件为每个任务添加一个新的部件,最好是在很少手动配置的情况下自动添加。现在,我已经尝试了一些不起作用的东西,或者没有正确的属性。什么不起作用:

addPart = function(partToAdd) {
    self.mission().parts.push(new Part(partToAdd));
}

addPart = function() {
    koMapping.toJS(partToAdd, {}, self.mission);
}

addPart = function() {
    koMapping.toJS(partToAdd, {}, self.mission().parts);
}
那么,我是如何做到这一点并让它自动映射的呢


附录:值得注意的是,我在这里使用koMapping而不是ko.mapping,因为我还使用了requireJS…

您可以这样做:

addPart = function(partToAdd) {
    self.mission().parts(ko.utils.arrayMap(partToAdd, function (part) {
        return new Part(part);
    });
}
addPart的第一个实现似乎工作正常,请检查此项。