0

我需要使用敲除映射插件来动态更新带有 ajax json 数据的对象。但是属性类型发生了变化。例如,我收到如下 json 数据:

{“类型”:“A”,“输出”:“这是 A”}

或者

{“类型”:“B”,“输出”:{“名称”:“B”}}

或者

{“类型”:“C”,“输出”:[“C1”,“C2”,“c3”]}

我在前端有不同的视图模板来根据类型展示我的模型。但问题是 ko.mapping.fromJS(data, {}, viewModle) 不起作用,因为输出类型不固定。我如何动态映射它?

4

2 回答 2

0

您可以创建多个表示每种类型的 javascript 对象。您可以将自定义映射提供给插件,您可以在其中控制对象的创建方式(以及创建的对象类型。

像这样的东西:

var mapping = {
create: function(json) {
    if(json.data.Type == 'A'){
        return new YourTypeA();

     }  
     //same for your other types
 }
}

var data = '[{ "Type": "A", "Titel": "Title1", "Description": "Description 1" }, { "Type": "B", "Titel": "Title 2", "Description": "Description 2" }, { "Type": "C", "Titel": "Title     3", "Description": "Description 3"}]';
    ko.mapping.fromJS(eval(data), mapping, viewModel);

希望这可以帮助

于 2012-10-04T07:30:32.480 回答
0

我自己找到了答案。只需将项目放入数组中,然后映射就会很好。

data = [{"type" : "A", "output" : "This is A" }]
ko.mapping.fromJS(data, {}, viewModle)
data = [{"type" : "B", "output" : {"Name" : "B"}}]
ko.mapping.fromJS(data, {}, viewModle)
于 2012-10-10T07:44:35.977 回答