2014-02-24 79 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