0

我在这里阅读了一些主题,并且我知道我的属性在函数globalSettings中不可用存在范围问题。google.maps.event.addDomListener

console.log语句返回undefined,但如果我这样做console.log(globalSettings),它会显示对象及其属性。

如何使属性可用,以便我可以使用它们来初始化地图中心和缩放?

var globalSettings = jQuery.parseJSON(wpmm_settings);
var ICON = new google.maps.MarkerImage('medicare.png', null, null,
    new google.maps.Point(14, 13));

var SHADOW = new google.maps.MarkerImage('medicare-shadow.png', null, null,
    new google.maps.Point(14, 13));

google.maps.event.addDomListener(window, 'load', function(globalSettings) {
    console.log(globalSettings.map_center_lat);
  var map = new google.maps.Map(document.getElementById('map-canvas'), {
    center: new google.maps.LatLng(globalSettings.map_center_lat, 135),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });...
4

1 回答 1

1

wpmm_settings是一个字符串:

"[{\"default_zoom\":\"8\",\"map_center_lat\":\"51.4992913\",\"map_center_lng\":\"-0.1639785\"}]"

globalSettings是解析该字符串的结果:

[Object { default_zoom="8", map_center_lat="51.4992913", map_center_lng="-0.1639785"}]

请注意,由于最外面的方括号,它最终成为一个单元素数组。

的值作为map_center_lat访问globalSettings[0].map_center_lat

如果您从字符串中取出最外面的方括号,您将得到一个“裸”对象,并且可以按预期访问属性。

然后...

google.maps.event.addDomListener(window, 'load', function(globalSettings) {...

不传递globalSettings给事件处理程序。事件被传递——这是标准行为:事件被传递给事件处理程序。这条线的作用是globalSettings在该函数内部设置window.load事件。因此,您需要将提及的内容替换为globalSettingsevt可以在函数内部忽略的内容。

您的代码片段中的代码仍然存在问题...,但是正确获取对象和事件处理程序将使查找这些更容易。

于 2012-05-07T00:11:05.327 回答