这是(我相信)一个简单问题的简单问题,但解释起来有点棘手......
我已经淘汰成功绑定到DOM,但是我在从Ajax请求更新Javascript视图模型时遇到了困难。
问题是收到的JSON中的名称与视图模型中的属性不匹配。
查看模型
var Group = function (data) {
this.id = data.id;
// Notice the Group 'name' is different to the JSON data 'title'
this.name = ko.observable(data.title);
};
var GroupList = function (data) {
this.groups = ko.observableArray();
ko.mapping.fromJS(data, {
groups: {
key: function (groupData) {
return ko.utils.unwrapObservable(groupData.id);
},
create: function (options) {
return new Group(options.data);
}
}
}, this);
};
初始JSON&设置
var json = {
groups : [ {
id : 1,
title : 'Engineers'
}, {
id : 2,
title : 'Sales'
}
]
};
var viewModel = new GroupList(json);
ko.applyBindings(viewModel);
一段时间后(Ajax的结果)数据更新......
var updatedJson = {
groups : [ {
id : 1,
title : 'Engineers 2'
}, {
id : 2,
title : 'Sales 2'
}
]
};
ko.mapping.fromJS(updatedJson, {}, viewModel);
这个JSFiddle完全显示了问题:http://jsfiddle.net/1gp3fp80/3/
最初创建视图模型时,它正确"映射"由于行title
name
到了组实例this.name = ko.observable(data.title);
属性
当视图模型更新时,ko.mapping.fromJS(updatedJson, {}, viewModel);
Group
最终会显示包含原始值的name
属性,以及新的title
已使用新值创建的属性。
我已多次阅读knockout mapping documentation但无法弄清楚该怎么做(我对现代网络开发不熟悉)。
最终问题很简单:是否可以将knockout映射插件配置为从一个JSON名称映射到视图模型中的其他名称,如果是这样,您是如何做到的?希望答案同样简单......