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的第一个实现似乎工作正常,请检查此项。