【问题标题】:Addressing jQuery Google Maps object without instance在没有实例的情况下处理 jQuery Google Maps 对象
【发布时间】:2014-04-04 15:49:17
【问题描述】:

我正在尝试将 KML 图层添加到现有的 google 地图对象,但无法控制对象实例(和初始化)。

到目前为止,我发现对象位于(DOM): window.google.maps... (好吧,这只是构造函数,而不是渲染的 Map 对象本身)

这是我要添加到 google.maps.Map 对象的现有(?)实例的内容:

var kmlUrl = 'http://.../polygon-simple.kml';

var kmlOptions = {
  suppressInfoWindows: false,
  preserveViewport: true
};

var kmlLayer = new window.google.maps.KmlLayer(kmlUrl, kmlOptions);

包含 Map 对象的页面由托管公司提供,并使用其自己的 jQuery 小部件来生成对象。我可以在 html-body 中添加我的 javascript(也可以在其中创建地图的“服务器端”)。

由于我无法更改使用的 JS 文件和 CMS 添加的 JS 的来源,我需要解决现有对象并执行以下操作:

kmlLayer.set(obj.Map);

应用我的添加并更新 Map 对象。但这显然不起作用。

我对整个网站进行了 firebug,并试图找到由 jQuery 小部件生成的 Map 实例 - 什么也没有。我遍历了网站上的每个对象 - 什么都没有。

完全由我自己编写谷歌地图的代码是不可能的,因为我需要在后端为非开发人员保留它的可配置性。

我猜这个问题会转移到一个 jQuery 小部件问题上……在此先感谢!

【问题讨论】:

  • 你是如何创建“现有的谷歌地图对象”的? window.google.maps... 是 Google Maps Javascript API 代码。
  • 我发现了什么:self.map = new window.google.maps.Map(self.container[0], ... 我想,我做了一些更多的调试来获得“自我”的范围 引导这走向正确的方向?代码被缩小并且很难阅读......
  • 好的,尝试获取范围是个坏主意。我完全迷失在使用 Firebug 和 DOM Inspector 进行的那种“调试”中。托管者的代码、jQuery 和所有 Google API 的混合对于我的 JS 知识来说太沉重了。有任何想法吗?也许还有一些其他有用的浏览器内工具?
  • @geocodezip 好的,最后我最终使用了您的 geoxml3 库并“自己”完成了整个 KML 处理(使用 geoxml3)。一点提示将是不错的地理编码压缩 ;-)

标签: javascript google-maps dom kml jquery-widgets


【解决方案1】:

window.google.maps.Map 不是地图对象,它是所述对象的构造函数。对象本身在另一个城堡中(变量)。

obj instanceof google.maps.Map 

如果对象是 googlemaps Map 对象,则应返回 true。如果你真的找不到变量,你可以编写一个循环遍历页面上的所有对象,以找到返回 true 的对象。

作为 chrome 调试器的附注,Map 对象如下所示:

它说地图类型是“em”,这很奇怪,这是因为 GoogleMaps 库被缩小了

【讨论】:

  • 我已经遍历了网站上的每个对象,但它们似乎都不是来自 window.google.maps.Map 构造函数的“派生”副本。我想它应该看起来像一个副本,因为 Map 构造函数是继承对象的原型,不是吗?
  • 好的,我再次遍历了网站上的每个对象。没有匹配 :( 我做了更多的研究,发现 Map 对象是通过主机编写的 jQuery 小部件生成的。self 的范围在 jQuery 小部件的对象创建内部。我什至可以访问小部件对象通过 jQuery 寻址 $( ":data( 'ui-externalcontentUiMaps' )" )。但我仍然无法访问 Map 对象本身。Source of the hoster's jQ widget
  • @NiGe 在插件代码中,您可以在开头看到这一行:'var self = this',地图对象存储在'self.map'中。因此,如果您可以获取对此插件生成对象对象的引用,您只需向其添加“.map”即可获取 googlemaps 引用
  • 好的,我最终自己完成了整个地图(使用 geoxml3)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 2018-01-07
相关资源
最近更新 更多