2013-03-14 63 views
0

我正在尝试使用挖空映射插件,除了一部分外,我的工作正常。Knockout映射数组但不包含其子属性?

我有一个对象数组,我希望数组是可观察的,但我不希望数组中的对象在这个时候是可观察的。

例如:

主要

  • 标签[]

标签

  • 标题
  • 标识
  • 无线ndows []

窗口

  • 标题
  • 编号
  • 位置
  • var MainMapping = { 
        'Tabs': { 
        create: function(options) { 
         return ko.mapping.fromJS(options.data, {'ignore': ['Id']}, model.tab); 
        } 
        } 
    }; 
    

我想它,以便没有一个Window属性是可观察的,但我想要Windows数组。

任何人都可以给我一些关于如何做到这一点的提示?

回答

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]); 
0

mapping plugin拥有复制选项,该选项创建JS属性并将值复制过来(即,我不认为您可以将'Window.Title'作为顶级视图模型的属性映射,尽管随意试试吧!),听起来就像你在做什么。但是,因为它是一个孩子,我不确定它会起作用,因此您可能需要查看创建映射,您可以在其中完全控制映射,并且可以将窗口数据对象直接复制到Windows数组中,或者也使用映射插件,并在其上使用复制映射。