我正在尝试使用淘汰映射插件,除了一部分外,我的工作正常。
我有一个对象数组,我希望数组是可观察的,但我不希望此时数组中的对象是可观察的。
例如:
主要
标签
窗口
等
var MainMapping = {
'Tabs': {
create: function(options) {
return ko.mapping.fromJS(options.data, {'ignore': ['Id']}, model.tab);
}
}
};
我希望它没有任何Window属性是可观察的,但我想要Windows数组。
有人可以给我一些如何做到的提示吗?
答案 0 :(得分:0)
mapping plugin有复制选项,它创建了具有复制值的JS属性(即我认为你不能将'Window.Title'作为顶级视图模型的属性映射,尽管随意尝试!),这听起来像你所追求的。但是,因为它是一个孩子,我不确定它是否会起作用,所以你可能想看看创建映射,你可以完全控制映射,你可以直接将窗口数据对象复制到Windows数组中,或者也使用映射插件,并在其上使用复制映射。
答案 1 :(得分:0)
以下是我提出的答案:
var Main = function() {
return { ....}
}();
var mainMap = {
'Tabs':{
create:function(options){
return new Tab(options.data);
}
}
};
function Tab(data){
var defaults = { ...}
data = $.extend(true, defaults, data);
var tabMap = {
'copy': ['id'],
key: function(data) {
return ko.utils.unwrapObservable(data.id);
},
'windows': {
create: function(options) {
return new myWindow(options.data);
}
}
};
ko.mapping.fromJs(data, tabMap, this);
}
function myWindow(data){
var defaults = { ....};
return $.extend(true, defaults, data);
}
ko.mapping.fromJS(data, mainMap, Main);
ko.applyBindings(Main, $('#Main')[0]);