2013-02-21 3 views
0

У меня есть этот ViewModel и функция, чтобы добавить в него данные,Динамического добавления данных observableArray

 function viewModel() { 
      this.loadData = function() { 
       this.Items().push('X'); 
       this.Items().push('Y'); 
      }; 

      this.Items = ko.observableArray(['A', 'B']); 
     } 

     var vm = new viewModel(); 
     ko.applyBindings(vm); 
     vm.loadData(); 
     alert(vm.Items()); 

Я пытаюсь напечатать значения в элементах массива, а X и Y никогда не отображаются. Хотя появляется предупреждение A, B, X и Y. Что я делаю неправильно?

<div data-bind="foreach: {data: Items, as: 'item' }"> 
     <span data-bind="text: item"></span> 
    </div>   

Спасибо.

ответ

1

this.Items() раскрывает базовый массив ko.observableArray(), который является обычным массивом. Вы должны использовать это:

this.Items.push('X'); 
this.Items.push('Y'); 

demo

+0

Я немного смущен, когда использовать это. Элементы и когда использовать this.Items()? Я думал, что всегда должен использовать Items() - вчера я опубликовал аналогичный вопрос, http://stackoverflow.com/questions/14992898/observable-object-not-displaying-some-properties – user471317

+1

Используйте 'this.Items', когда захотите магия «KnockOut» произойдет, когда вы измените содержимое массива ('this.Items' * выглядит * как массив, но на самом деле это не специальный тип KnockOut, который имитирует массив;' this.Items() 'возвращает фактический массив, где хранятся данные, но это не« волшебство »). В вашем другом вопросе используется наблюдаемый, а не наблюдаемый массив, который представляет собой две разные вещи. – robertklep

0

Вы должны передать данные непосредственно в this.Items.

this.Items() возвращает содержимое наблюдаемого массива.

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