0
的后跟我已经更新了代码:
viewModel.getQuotesSuccess = function (result) {
var myCoverQuotesViewModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
self.Childs = ko.observableArray(ko.utils.arrayMap(data.Childs, function (c) {
return new myCoverQuotesViewModel(c);
}));
self.selectedChild = ko.observable();
self.showChildren = ko.computed(function() {
return self.selectedChild()
&& self.selectedChild().Childs().length > 0;
});
var mapping = {
'CoverQuotes': {
create: function (options) {
return new myCoverQuotesViewModel(options.data);
}
}
}
ko.mapping.fromJS(result, mapping, viewModel);
};
视图模型会是这个样子:
var viewModel = {
CoverQuotes: [{id: 1, label:'test', Childs:[{id: 2, label:'child1'}]]
};
所以,总之,我有CoverQuotes的数组,其中每个元素还包含CoverQuotes(依此类推)的数组。
我在这个映射中遇到的问题是使用Childs可观察数组。当拨打电话:
return new myCoverQuotesViewModel(options.data);
为主要对象,它工作正常。但是,在从arrayMap函数内调用构造函数时,则该行:
ko.mapping.fromJS(data, {}, self);
不会做任何事情。
因此,嵌套的孩子被分配属性selectedChild和showChildren,但他们缺少所有其他人(如本例中的id和label)。
我错过了什么,所以映射也适用于儿童?
你岂不放置你的mappingChildren选择你的虚拟机之外实现同样的目标解决我的问题?实际上,您应该能够将mappingChildren的'Childs'属性复制到映射中,并将子映射指令复制到ko.mapping.fromJS(data,mapping,self)。由于数据包含'Childs'属性,映射应该使用'Childs'属性,即使映射是相同的。 – beauXjames 2013-11-01 21:19:47