2014-02-24 38 views
0

子對象考慮這個JSON對象:擴展與淘汰賽映射

{ 
    "BusinessModels":[ 
     { 
      "Id":1, 
      "Name":"Business to Business", 
      "Businesses":[], 
      "ReportTypes":[ 
       {...}, 
       {...}, 
       { 
        "Id":6, 
        "Name":"Risk", 
        "BusinessModelId":1, 
        "Reports":[ 
         { 
          "Id": 4, 
          "Name": "Test", 
          "Value": ko.observable() // NEED TO ADD THIS PROPERTY USING MAPPING 
         }, 
         {...} 
        ] 
       } 
      ], 
     } 
    ] 
} 

我嘗試添加使用下面的代碼的價值,但它似乎並沒有工作。

var mapping = { 
    'BusinessModels': { 
     create: function(options) { 
      return new function() { 
       var self = options.data; 
       self.SelectedBusiness = ko.observable(); 
       self.Businesses.unshift({ Id: 0, Name: 'All Clients' }); 
       ko.mapping.fromJS(self, {}, this); 
      }; 
     } 
    }, 
    'Reports': { 
     create: function (options) { 
      return new function() { 
       var self = options.data; 
       self.Value = ko.observable(); 
       ko.mapping.fromJS(options.data, {}, this); 
      }; 
     } 
    } 
}; 

var model = ko.mapping.fromJSON(raw, mapping); 
ko.applyBindings(model); 

我需要給子對象「報告」評爲Value一個ko.observable對象。我如何去做這個在ko.mapping?

+0

我不太確定你在問什麼。如果你想用你想要的結構手動構建它,你能發佈一個「之後」對象嗎? –

+0

我更新了我的評論。我只需要添加一個屬性到一個孩子,我的映射不起作用。 – dimiguel

回答

0

好吧,那很快。我想出了答案。

var mapping = { 
    'BusinessModels': { 
     create: function (options) { 
      return new function() { 
       var self = options.data; 
       self.SelectedBusiness = ko.observable(); 
       self.Businesses.unshift({ Id: 0, Name: 'All Clients' }); 
       ko.mapping.fromJS(self, mapping, this); 
      }; 
     } 
    }, 
    'Reports': { 
     create: function (options) { 
      return new function() { 
       var self = options.data; 
       self.Value = ko.observable(); 
       ko.mapping.fromJS(self, mapping, this); 
      }; 
     } 
    } 
}; 

而不是使用ko.mapping.fromJS(self, {}, this)我用ko.mapping.fromJS(self, mapping, this)。原因是因爲Reports是BusinessModels的嵌套對象。

+1

我正要發佈幾乎相同的東西。 ko.mapping.fromJS會啓動一個全新的地圖,除非您提供映射配置,否則它只會執行默認地圖。報告是BusinessModels的一個孩子的事實是無關緊要的。我將爲僅包含Reports定義的fromJS函數提供一個顯式映射,不會傳入外部映射,並且會再次傳入Reports fromJS調用,如果重複JSON字段名稱,則可能會進入無限循環 –

+0

感謝您你的幫助! – dimiguel