У меня есть этот 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>
Спасибо.
Я немного смущен, когда использовать это. Элементы и когда использовать this.Items()? Я думал, что всегда должен использовать Items() - вчера я опубликовал аналогичный вопрос, http://stackoverflow.com/questions/14992898/observable-object-not-displaying-some-properties – user471317
Используйте 'this.Items', когда захотите магия «KnockOut» произойдет, когда вы измените содержимое массива ('this.Items' * выглядит * как массив, но на самом деле это не специальный тип KnockOut, который имитирует массив;' this.Items() 'возвращает фактический массив, где хранятся данные, но это не« волшебство »). В вашем другом вопросе используется наблюдаемый, а не наблюдаемый массив, который представляет собой две разные вещи. – robertklep