2012-04-12 4 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オブジェクトから(更新ボタンをクリックすることによって)DaysUpdateオブジェクトから取得します。 2番目の更新は配列から "Monday"と "Tuesday"オブジェクトを削除します。どのように私はそれらの滞在を作るのですか?

PS。より良い構造の例のMark Robinsonに感謝します。

+0

このフィドルはあなたの問題を示しています。たぶん、別のSOユーザーがそれを使って解決策を提供するかもしれません。 http://jsfiddle.net/unklefolk/PfFf9/1/ –

+0

素晴らしい!フィドルに感謝します。私は質問でそれを参照します。 – Dziamid

+0

@Dziamid - コードの小さな誤字を訂正しましたが、キーが使用されなかった「日」マッピングの後にスペースがありました。しかし、私の答えには影響しません。 – madcapnmckay

答えて

4

これはマッピングプラグインによくある質問です。現在、プラグイン自体でこれを行う方法はありません。しばらく私を悩ませている。プラグインはあなたが与えた配列が配列の新しい内容だとみなし、他の項目を削除します。

私が知っている唯一の解決策は、コレクションをループして各要素を手動でマップすることです。私は適切な解決策を考え出すとマッピング・プラグインの連中にプルリクエストを送信しようとする周り取得しますこれらの日の

http://jsfiddle.net/madcapnmckay/5878E/

一つ。

これが役に立ちます。

関連する問題