2013-03-14 67 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數組中,或者也使用映射插件,並在其上使用複製映射。