Я изо всех сил пытаюсь преобразовать строку JSON в наблюдаемый массив для использования в цикле foreach в HTML. Я получаю дополнительное неопределенное свойство в наблюдаемом массиве, когда я его просматриваю. Любая помощь будет значительно оценена. Вот мой код:undefined (extra) object in knockoutjs observableArray, созданный из строки JSON
var regions = '{"1":{"id":1,"name":"Scotland"},"3":{"id":3,"name":"North West"},"7":{"id":7,"name":"South East"},"5":{"id":5,"name":"East Anglia"},"9":{"id":9,"name":"Wales"},"8":{"id":8,"name":"South West"},"6":{"id":6,"name":"Greater London"},"2":{"id":2,"name":"North East"},"4":{"id":4,"name":"Midlands"}}';
this.regions = ko.observableArray();
ko.mapping.fromJSON(regions, {}, this.regions());
ko.utils.arrayForEach(this.regions(), function(region){
console.log(region);
});
Когда я запускаю мой forloop - я получаю 10 журналов консоли, когда есть только 9 объектов в строке JSON, первый журнал не определен, а следующий 9 является правильным.
undefined
store-locator.html:174 Object {id: function, name: function}
store-locator.html:174 Object {id: function, name: function}
store-locator.html:174 Object {id: function, name: function}
store-locator.html:174 Object {id: function, name: function}
store-locator.html:174 Object {id: function, name: function}
store-locator.html:174 Object {id: function, name: function}
store-locator.html:174 Object {id: function, name: function}
store-locator.html:174 Object {id: function, name: function}
store-locator.html:174 Object {id: function, name: function}
Я могу перебрать массив в HTML с помощью следующего кода, но опять же я получаю пустой элемент списка в начале моего списка следует 9 имен областей.
<ul data-bind="foreach: $root.regions()">
<li data-bind="text: name"></li>
</ul>
P.S Я довольно уверен, что JSON действительно, это PHP массив, преобразованный с использованием json_encode()
Вы 'regoins' не содержат ** массив **, но объект, который имеет proeprties, который называется 1,2,3,4 и т. Д., Это не поддерживается плагином сопоставления, поэтому он не может правильно создать массив для вы. Если вы измените свои «регионы», чтобы содержать реальный массив, он работает нормально: http://jsfiddle.net/gpm2zuvs/ – nemesv
Если вы не можете изменить то, что получаете с серверной стороны, я предлагаю вам использовать ko.utils.parseJson вместо этого выполнить эту задачу. Проверьте вывод консоли на скрипку http://jsfiddle.net/f1dbLq3j/11/. Проверьте консольный выход скрипки – Sabry