我需要使用knockout mapping plugin来动态更新带有ajax json数据的对象。但属性类型会发生变化。例如,我收到json数据,如:
{“type”:“A”,“output”:“这是A”}
或
{“type”:“B”,“output”:{“姓名”:“B”}}
或
{“type”:“C”,“output”:[“C1”,“C2”,“c3”]}
我在前端有不同的视图模板,根据类型显示我的模型。但问题是ko.mapping.fromJS(data,{},viewModle)无效,因为输出类型不固定。我如何动态映射它?
答案 0 :(得分: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);
希望这有帮助
答案 1 :(得分:0)
我自己找到了答案。只需将项目放入数组中,然后映射即可。
data = [{"type" : "A", "output" : "This is A" }]
ko.mapping.fromJS(data, {}, viewModle)
data = [{"type" : "B", "output" : {"Name" : "B"}}]
ko.mapping.fromJS(data, {}, viewModle)