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, затем (нажав кнопку обновления) из объекта DateUpdate. Второе обновление удаляет объекты «Понедельник» и «Вторник» из массива. Как мне сделать это?

PS. Спасибо Марку Робинсону за лучший структурированный пример.

+0

Эта скрипка демонстрирует вашу проблему. Возможно, другой пользователь SO может использовать его для предоставления решения. http://jsfiddle.net/unklefolk/PfFf9/1/ –

+0

Отлично! Спасибо за скрипку. Я расскажу об этом в вопросе. – Dziamid

+0

@Dziamid - я только что исправил небольшую опечатку в вашем коде, после отображения «Дни» было пространство, из-за чего ключ не использовался. Однако это не влияет на мой ответ. – madcapnmckay

ответ

4

Это распространенный вопрос re-плагина. В настоящее время нет способа сделать это с самим плагином. Некоторое время я искал меня. Плагин предполагает, что массив, который вы ему дали, это новое содержимое массива, поэтому удаляет другие элементы.

Единственное решение, о котором я знаю в настоящее время, - это прокрутить коллекцию и вручную отобразить каждый элемент.

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

Один из этих дней я получаю вокруг, пытаясь придумать правильное решение и отправить запрос тянуть к картирование плагин парням.

Надеюсь, это поможет.

Смежные вопросы