我正在使用 Knockout.js,我的 viewModel 是一个内部带有多维数组的对象,我在访问特定元素时遇到了问题。我的代码是:
var viewModel = {
states: [
new state("Virginia", [["Va Beach",[{lat:36.852926,lng:-75.977985}]], ["Chincoteague Island",[{lat:37.933179,lng:-75.378809}]]]),
new state("Maryland", [["Atlantic City",[{lat:39.364283,lng:-74.422927}]], ["Ocean city",[{lat:38.336503,lng:-75.084906}]]]),
new state("North Carolina", [["Oakacroke",[{lat:35.114615,lng:-75.98101}]], ["Nags Head",[{lat:35.957392,lng:-75.624062}]],["Emerald Isle",[{lat:34.677940,lng:-76.950776}]]])
]
};
var state = function(name, city) {
this.name = name;
this.city = ko.observableArray(city);
}
我正在尝试获取每个城市的纬度和经度。我尝试过使用 JSON.stringify 和过滤器,但无法专门隔离 lan 和 lng。
最佳答案
在 foreach:city
绑定(bind)的上下文中,您需要执行如下操作:
<span data-bind="text: $data[1][0].lat"></span>
<span data-bind="text: $data[1][0].lng"></span>
基本上,您的states
数组有一个名为city
的属性(坏名字,它真的应该是cities
),它本身就是,数组。因此,您需要为该数组建立索引(这就是 foreach 所做的),并且该数组中的每个项目本身就是一个数组,其中第一项是城市名称,第二项是一个带有具有您需要的 lat
和 lng
属性的单个对象。
所以像 viewModel.states[0].city[0][1][0].lat
这样的东西应该会给你 36.852926
当然,考虑到访问所需的属性是多么复杂,可能值得考虑将其转换为更易于使用的东西。
关于javascript - 访问对象内多维数组内的对象元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33897849/