Google 地图不适用于多视图?

Google Maps not designed to work in multi-views?

检查我对 Google 地图的理解:

我正在开发一个网页,显示我雇主设施的多种不同类型的信息。我一直在使用多视图,并根据用户输入(按钮工具栏)激活正确的视图。当我添加一个视图作为所选建筑物的地图时,我 运行 遇到了问题。当用户导航到建筑地图视图时,我可以让地图出现。但是当用户离开那个视图时,地图 api 给我错误

0x800a138f - JavaScript runtime error: Unable to get property 'offsetWidth' of undefined or null reference

据我了解,这是因为当另一个视图变为活动状态时,包含地图的视图将不再呈现。 api 正在尝试访问不再存在的对象。

我可以尝试清除对象 - 删除所有侦听器,删除对象,甚至删除包含它的 div。但我刚刚阅读了 how to destroy a map instance 上的相关问题,并听取了 Chris Broadfoot 和 Luke Mahe 对该主题的讨论。

据此,我的理解是 google 映射 api 不是为这种处理而设计的。所以,它真的不是为了兼容多视图之类的东西而设计的。

这是正确的吗?如果没有,我错过了什么?如果是这样,对于使用什么而不是多视图的网络应用程序新手有什么建议吗(我正在考虑面板和 hide/show 根据需要)?

更新和某种答案...
我切换到使用多个面板并隐藏所有面板,除了带有用户选择使用的信息的面板。然后地图显示空白,除非我做了以下两件事之一:将地图设置为创建为 endRequest...

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myInitMap);

如果我理解正确,这意味着我的处理程序 (myInitMap) 在每次回发后都会执行(重新创建地图)。此外,这似乎有点不稳定 - 有时 IE 会给我错误,我无法找出模式或原因。 Chrome 每次都能正常工作。

另一种可行的方法是不在任何特定事件上调用地图创建,而是从代码隐藏 page_load 事件中注册我的地图初始化脚本。我的面板和多视图已包含在更新面板中,我需要在该更新面板下注册脚本...

ScriptManager.RegisterStartupScript(DataUpdatePanel, DataUpdatePanel.GetType(), "ShowGoogleMap", "myInitMap();", true);

这是因为我认为导致问题的原因是我的面板(以及早期版本中的多视图)位于该 UpdatePanel 中。由于 UpdatePanel 执行了部分页面更新,地图创建脚本和 API 调用没有按正确的顺序与其他所有内容一起发生。使用脚本管理器注册地图初始化脚本基本上告诉它把它放在那个部分页面更新的正确位置(最后?)。

另外,我不知道如何更新地图。该脚本基本上每次都重新生成地图。我尝试保留一个指向地图的 var 指针,以便我可以测试它是否已经创建,然后更新它,但这没有用。我认为 UpdatePanel 部分页面更新的工作方式很像整个页面刷新,但仅针对 UpdatePanel 中包含的内容。所以当部分更新发生时,之前的内容被丢弃并重新创建,所以地图也必须重新创建。

如果有人对此有不同的理解,我会喜欢一些重定向。