Knockout.js 敲除:数组的部分映射

Knockout.js 敲除:数组的部分映射,knockout.js,knockout-mapping-plugin,knockout-2.0,Knockout.js,Knockout Mapping Plugin,Knockout 2.0,看一看 var Days={'Days':[{“id”:1,“title”:“星期一”},{“id”:2,“title”:“星期二”},{“id”:3,“title”:“Wensday”}]}; var DaysUpdate={'Days':[{“id”:3,“title”:“星期三”},{“id”:4,“title”:“星期四”},{“id”:5,“title”:“星期五”}]}; 变量映射={ “天”:{ 键:函数(数据){ 返回ko.utils.unwrapobbservable(dat

看一看


var Days={'Days':[{“id”:1,“title”:“星期一”},{“id”:2,“title”:“星期二”},{“id”:3,“title”:“Wensday”}]};
var DaysUpdate={'Days':[{“id”:3,“title”:“星期三”},{“id”:4,“title”:“星期四”},{“id”:5,“title”:“星期五”}]};
变量映射={
“天”:{
键:函数(数据){
返回ko.utils.unwrapobbservable(data.id);
}    
}}
var viewModel={
日期:ko.observearray(),
更新:函数(){
fromJS(DaysUpdate,mapping,viewModel);
}
}
fromJS(天,映射,视图模型);
应用绑定(视图模型);
在此示例中,数据部分映射。首先来自Days对象,然后(通过单击更新按钮)来自DaysUpdate对象。第二次更新将从数组中删除“星期一”和“星期二”对象。我怎样才能留住这些


注:感谢Mark Robinson提供了更好的结构化示例

这是映射插件的常见问题。目前,插件本身无法做到这一点。这让我烦了一段时间。插件假定您提供给它的数组是数组的新内容,因此会删除其他项

目前我所知道的唯一解决方案是在集合中循环并手动映射每个元素

总有一天,我会想办法找到一个合适的解决方案,并向映射插件人员发送一个请求


希望这有帮助。

这把小提琴说明了你的问题。也许另一个用户可以使用它来提供解决方案。伟大的谢谢你的提琴。我将在问题中引用它。@Dziamid-我刚刚更正了代码中的一个小错误,在“天”映射后有一个空格,导致密钥无法使用。然而,这并不影响我的回答。
<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>