knockoutjs中的undefined(额外)对象observableArray是从JSON字符串创建的

时间:2015-01-28 23:29:11

标签: javascript json knockout.js

我正在努力将JSON字符串转换为可观察数组,以便在HTML中的foreach循环中使用。当我遍历它时,我在可观察数组中得到一个额外的未定义属性。任何帮助都会受到很大的影响。这是我的代码:

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时 - 当JSON字符串中只有9个对象时,我得到10个控制台日志,第一个日志是未定义的,接下来的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是有效的,它是一个使用json_encode()转换的php数组

1 个答案:

答案 0 :(得分:0)

哇,这在Angular中要容易得多。感谢您的评论,这两个有用的答案,但memesv的答案是我真正需要知道的。

最后更改了后端以提供没有键的数组,因此淘汰赛能够正确解释数据。

非常感谢。 灰