当我点击位置标签时,我的网站会加载google地图api,然后初始化地图。在单击此选项卡之前,我不想加载api。我注意到每次单击选项卡时都会加载api(导致站点的内存使用量增加)。我将其包装的if/else
语句在click()
函数中不起作用。我也按照https://stackoverflow.com/a/11803418/4184379异步加载api和我的mapconstructor.js。我已经检查了if/else
上的类似答案没有点击,但他们没有帮助。
$("[id=location-tab]").click(function() {
if (typeof google.maps.event.trigger == 'undefined') {
$.when(
$.getScript("https://maps.googleapis.com/maps/api/jsv=3.exp&sensor=false&callback=initialize" ),
$.getScript( "assets/js/gmap.js" ),
$.Deferred(function( deferred ) {
$( deferred.resolve );
})
).done(function() {
initialize();
});
}
else {
google.maps.event.trigger(map_canvas, 'resize');
}
});
答案 0 :(得分:0)
你有没有检查过你是否正在做$("[id=location-tab]").click(function() {...
dom-ready?因为它似乎也很奇怪,你添加了一个延迟,可以解决你的when
电话。它应该可以很好地解决,但它似乎让你在dom-ready之前添加了on-click。
答案 1 :(得分:0)
有两个问题。一个是确定库的可用性,if
将抛出例外,例如google
未定义。一般来说,以下代码更健壮:
if (window.google && window.google && window.google.maps &&...) {
google.maps.event.trigger(map_canvas, 'resize');
} else {
if (!libraryIsLoading) { //needs to be defined somewhere in global scope...
libraryIsLoading = true;
//load library here
}
}
这个if
从左到右进行评估,因此它消除了异常的机会。
但是,正确加载库非常棘手。在大多数情况下,使用require.js是值得的,或者,如果您寻找较小尺寸的库,请查看curl.js
我会使用curl或者require或者任何替代方法而不是编写我自己的代码,因为我肯定会在项目的其他部分使用它:它提供了一种组织代码并使其面向未来的方法。 / p>