<select data-bind="options: Days, optionsText: 'title'"></select>
<input type="button" value="update" data-bind="click: update" />
<script type="text/javascript">
var Days = {'Days': [{"id":1,"title":"Monday"},{"id":2,"title":"Tuesday"},{"id":3,"title":"Wensday"}]};
var DaysUpdate = {'Days': [{"id":3,"title":"Wednesday"},{"id":4,"title":"Thursday"},{"id":5,"title":"Friday"}]};
var mapping = {
'Days': {
key: function(data) {
return ko.utils.unwrapObservable(data.id);
}
}}
var viewModel = {
Days: ko.observableArray(),
update: function() {
ko.mapping.fromJS(DaysUpdate, mapping, viewModel);
}
}
ko.mapping.fromJS(Days, mapping, viewModel);
ko.applyBindings(viewModel);
</script>
在此示例中,数据部分映射。首先从Days对象,然后(通过单击更新按钮)从DaysUpdate对象。第二次更新从数组中删除“星期一”和“星期二”对象。我该如何留下来?
PS。感谢Mark Robinson提供更好的结构化示例。
答案 0 :(得分:4)
这是映射插件的常见问题。目前,插件本身无法做到这一点。一段时间以来,这一直困扰着我。该插件假定您提供的数组是数组的新内容,因此删除其他项。
目前我所知道的唯一解决方案是遍历集合并手动映射每个元素。
http://jsfiddle.net/madcapnmckay/5878E/
有一天,我会尝试提出一个合适的解决方案并向映射插件发送拉取请求。
希望这有帮助。