我正在使用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。
答案 0 :(得分:2)
在 var dialog = new MessageDialog (this,
DialogFlags.Modal,
MessageType.Info,
ButtonsType.YesNo,
"The Hulk could totally take Super Man");
dialog.Response += (object o, ResponseArgs args) => {
if (args.ResponseId == ResponseType.Yes) {
Console.WriteLine("Yes clicked");
} else if (args.ResponseId == ResponseType.No) {
Console.WriteLine("No clicked");
} else if (args.ResponseId == ResponseType.DeleteEvent) {
Console.WriteLine("Dialog closed without clicking a button");
}
dialog.Destroy();
};
dialog.Run();
绑定的上下文中,您需要执行以下操作:
foreach:city
基本上,你<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
当然,看看访问所需属性有多复杂,考虑将其转换为更容易使用的东西可能是值得的。
答案 1 :(得分:0)
是的,每个 state 对象都有一个名称,并包含一个地方数组。
每个地方都包含一个包含单个元素的数组 - 纬度,经度对。 e.g。
("Virginia",
[
[
"Va Beach",
[
{lat:36.852926,lng:-75.977985}
]
]
]
)
因此
locationOfPlace = aState[aPlaceName][1]
并参考每个属性:
latitudeOfPlace = aState[aPlaceName][1].lat
longitudeOfPlace = aState[aPlaceName][1].lng
答案 2 :(得分:0)
你做出了一个奇怪的决定,将lat / lon对象包装在一个数组中,就像一个城市可能有多个坐标一样。
我认为,如果除了拥有state
对象之外,还有一个city
对象而不是对象文字,这将有助于清理您的设计。类似的东西:
var city = function(name, lat, lon) {
this.name = name;
this.location = {
lat: lat,
lon: lon
};
};
然后你宣布一个更像是的状态:
new state("Virginia", [
new city("Va Beach", 36.852926, -75.977985),
new city("Chincoteague Island", 37.933179, -75.378809)
]);
您可以像这样访问城市房产:
state.city()[0].location.lat