Я пытаюсь добавить элемент json в наблюдаемый массив, а в рендеринге появляется. Но когда я пытаюсь получить доступ к элементу с использованием синтаксиса item.property()
, он выходит из строя, но только для элемента post-initial-binding. Лучше объяснено с кодом ...Как добавить к наблюдаемому массиву с использованием сопоставления с нокаутом
Js:
var data = { colors: []};
data.colors.push({title: 'blue' });
var vm = ko.mapping.fromJS(data);
ko.applyBindings(vm);
vm.colors.push({ title: 'red' });
$("#out").html("<br/>colors are ...<br/>");
$.each(vm.colors(), function(i, clr) {
$("#out").append(clr.title() + "<br/>");
});
Выход: (примечание, "красный" не выплюнуть: /)
blue
red
colors are ...
blue
Демо: http://jsbin.com/ivacuw/7/edit
Я также пробовал делать vm.colors([ { title: 'red' }])
вместо vm.colors.push(...)
, но та же проблема. Ошибка Uncaught TypeError: Property 'title' of object #<Object> is not a function
Можно ли добавить массив в одну строку? Например, 'var arr = [{title: 'green'}, {title: 'yellow'}]' then later, 'vm.colors = ko.observableArray (arr)' возможно? –
Я изменил свой пост – Damien
Хмм, это, похоже, не сработало. http://jsbin.com/ivacuw/16/edit, возможно, это невозможно, и мне просто нужно добавить их один за другим ..? –