在Rails/Coffeescript/jQuery中异步加载Google地图和相关脚本
我想在单击按钮/链接后加载Google Map,以限制对Google Maps API的请求数量(成本!*)。比简单的“脚本”元素注入(追加)onclick事件更复杂的是,我还需要以同样的方式加载另外两个库:带有标签和信息框的marker_,包装在一个文件“extra_libs.js.coffee”中。它们只能在获取google maps api后加载。另外,运行其他脚本必须等待这两个lib被获取 我有一个可行的解决方案,但我不确定定义并触发$(window.load)是否正确。请回顾一下,也许你们知道更好的方法?我正在考虑设置超时,将执行推迟到'jQuery.active'==0等,但我找不到下面这样简单而简短的解决方案:在Rails/Coffeescript/jQuery中异步加载Google地图和相关脚本,jquery,google-maps,google-maps-api-3,Jquery,Google Maps,Google Maps Api 3,我想在单击按钮/链接后加载Google Map,以限制对Google Maps API的请求数量(成本!*)。比简单的“脚本”元素注入(追加)onclick事件更复杂的是,我还需要以同样的方式加载另外两个库:带有标签和信息框的marker_,包装在一个文件“extra_libs.js.coffee”中。它们只能在获取google maps api后加载。另外,运行其他脚本必须等待这两个lib被获取 我有一个可行的解决方案,但我不确定定义并触发$(window.load)是否正确。请回顾一下,也许
# Callback function used when google map api is loaded, must be a global function
window.load_scripts = ->
$('<%= javascript_include_tag asset_path('extra_libs'), id: :extra_libs %>').appendTo('body') unless $('#extra_libs').length
$(window).load ->
init_map_and_street_view()
$(window).trigger('load') # it doesn't work if we don't trigger this manually
# do some stuff with the map, init, set center etc.
init_map_and_street_view = ->
App.gMap.init('blablabla')
App.gMap.getMap().setCenter(App.gMap.getLocation($('#map')))
#...
load_map = ->
$('<%= javascript_include_tag map_url+"&callback=load_scripts", id: :google_maps_api %>').appendTo('body') unless $('#google_maps_api').length
$('#tab_map, #tab_street').click =>
load_map()
加载google map api时使用的回调函数必须是全局函数
window.load_脚本=->
$(“”).appendTo('body'),除非$('extra#libs')。长度
$(窗口)。加载->
初始地图和街道视图()
$(window).trigger('load')#如果我们不手动触发它,它将不起作用
#用地图、初始化、设置中心等做一些事情。
初始地图和街道视图=->
App.gMap.init('blablabla')
App.gMap.getMap().setCenter(App.gMap.getLocation($('#map'))
#...
加载映射=->
$('').appendTo('body'),除非$('google#maps_api')。长度
$(“#tab_地图,#tab_街道”)。单击=>
加载映射()
- 重要的是在“脚本”中加载google maps api的频率
window.load_scripts = ->
$.getScript('<%= asset_path("extra_libs") %>', init_map_and_street_view)
window.load\u脚本=->
$.getScript(“”,初始地图和街道视图)
其余的仍然是相同的< /p>我处于某个事物的中间,所以不能为一个答案拼凑一个适当的代码位,但是看看jQuery的代码> GoScript()/<代码>。它有一个回调参数,可以解决您的问题。。。谢谢它实际上是普通$.ajax的简写,似乎它可以异步加载其他依赖于gmap的lib:window.load\u scripts=->$.getScript(“”,init\u map\u和\u street\u view)