Javascript 使用敲除映射插件正确映射数组元素
我有一个viewModel,简化后看起来像这样:Javascript 使用敲除映射插件正确映射数组元素,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我有一个viewModel,简化后看起来像这样: var viewModel = function(){ var self = this; self.selectedObject = ko.observable({}); self.getUnit = function(){ //get the selected object from the server side as json self.selectedObject(ko.mapping.fromJS(data,
var viewModel = function(){
var self = this;
self.selectedObject = ko.observable({});
self.getUnit = function(){
//get the selected object from the server side as json
self.selectedObject(ko.mapping.fromJS(data,mapping));
};
self.addObjectMember = function(){
self.selectedObject().objectMembers.push(new ObjectMemberViewModel(null, self.selectedObject()));
self.save = function(){
var data = ko.mapping.toJS(self.selectedObject);
//ship data to server
}
从服务器接收的数据包含一个名为objectMembers
的数组,其中包含一些属性。不同对象的属性可能不同
我的映射对象如下所示:
var mapping = {
'objectMembers': {
create: function(options){
return new ObjectMemberViewModel(options.data, options.parent);
}
}
};
要了解我的问题,我将举一个例子:
用户加载页面,然后获取一个对象。该对象在objectMembers
数组中包含两个元素。然后使用ko.mapping.fromJS映射这些内容,一切都很好。我可以使用我的模型修改我的viewModel,并且viewModel会更新。然后,用户单击一个按钮触发addObjectMember
函数,向observableArray添加第三个条目。我也可以与之交互,对我的模型所做的任何更改都可以在viewModel中看到
单击“保存”时出现问题。如果我调试save方法,并检查self.selectedObject的内容,我可以看到它包含我希望它包含的内容,但是映射回变量data
的对象将objectsMembers
数组中的最后一个元素作为空对象({}
)。另外两个物体看起来和我想要的一样
我想我知道为什么。第一个对象的\uuuu ko\u mapping\uuu.mappedProperties
包含了它们最初映射时拥有的所有属性。但是,最后一个属性有一个空的\uu ko\u mapping\uu.mappedProperties
,因此我猜没有属性被映射回
所以我想我需要做一件事:
addObjectMember
上将对象添加到数组时,我需要获取的映射属性集,以便在保存时将其映射回
\uuuko\u mapping.mappedProperties
中我不知道如何做这些不觉得是肮脏的黑客,所以这里的任何帮助都将不胜感激。我最终使用了
ko.toJS
而不是ko.mapping.toJS
ko.toJS
不关心\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu映射
,映射所有内容(包括\uuuuuuuuuuuuuuuuuuuuuuuuu
这意味着它的映射比我需要的多了一点,但除此之外,它工作得很好。似乎ko.toJS
不关心最初映射的内容。将它组合起来是否有任何问题,以便我使用ko.mapping.fromJS
创建模型,然后使用ko.toJS
将其重新转换为javascript?