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對象中獲取。第二次更新將刪除陣列中的「星期一」和「星期二」對象。我如何讓這些留下來?
PS。感謝Mark Robinson提供更好的結構化示例。
這個小提琴演示你的問題。也許另一個SO用戶可以使用它來提供解決方案。 http://jsfiddle.net/unklefolk/PfFf9/1/ – 2012-04-12 15:22:16
太棒了!謝謝你的小提琴。我會在問題中提及它。 – Dziamid 2012-04-12 16:02:11
@Dziamid - 我只是修正一個小錯字在你的代碼,又出現了「日」映射造成不被使用的密鑰後的空間。但它不影響我的答案。 – madcapnmckay 2012-04-12 16:31:47