2012-04-12 2 views
3

this small example을 살펴보십시오.녹아웃 : 배열의 부분 매핑

<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 객체에서 (업데이트 버튼을 클릭하여) 두 번째 업데이트는 배열에서 "Monday"및 "Tuesday"개체를 제거합니다. 어떻게 그 사람들을 머물게합니까?

추신. Mark Robinson에게 감사드립니다.

+0

이 바이올린은 사용자의 문제를 보여줍니다. 다른 SO 사용자가 솔루션을 제공하기 위해이를 사용할 수 있습니다. http://jsfiddle.net/unklefolk/PfFf9/1/ –

+0

좋아요! 바이올린 주셔서 감사. 나는 그 질문에서 그것을 언급 할 것이다. – Dziamid

+0

@Dziamid - 코드에서 작은 오타가 수정되었지만 키가 사용되지 않게하는 '일'매핑 이후에 공간이있었습니다. 그러나 내 대답에는 영향을 미치지 않습니다. – madcapnmckay

답변

4

이것은 매핑 플러그인에 대한 일반적인 질문입니다. 현재 플러그인 자체로이 작업을 수행 할 수있는 방법은 없습니다. 한동안 나를 괴롭혔다. 플러그인은 배열에 새 배열 내용이 있다고 가정하므로 다른 항목을 제거합니다.

내가 아는 유일한 해결책은 컬렉션을 반복하고 각 요소를 수동으로 매핑하는 것입니다.

http://jsfiddle.net/madcapnmckay/5878E/ 내가 적절한 해결책을 와서 매핑 플러그인들에 풀 요청을 보내려고 주위거야 요즘의

하나.

희망이 도움이됩니다.