Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Rails/Coffeescript/jQuery中异步加载Google地图和相关脚本_Jquery_Google Maps_Google Maps Api 3 - Fatal编程技术网

在Rails/Coffeescript/jQuery中异步加载Google地图和相关脚本

在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)是否正确。请回顾一下,也许

我想在单击按钮/链接后加载Google Map,以限制对Google Maps API的请求数量(成本!*)。比简单的“脚本”元素注入(追加)onclick事件更复杂的是,我还需要以同样的方式加载另外两个库:带有标签和信息框的marker_,包装在一个文件“extra_libs.js.coffee”中。它们只能在获取google maps api后加载。另外,运行其他脚本必须等待这两个lib被获取

我有一个可行的解决方案,但我不确定定义并触发$(window.load)是否正确。请回顾一下,也许你们知道更好的方法?我正在考虑设置超时,将执行推迟到'jQuery.active'==0等,但我找不到下面这样简单而简短的解决方案:

# 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的频率
''更新'' 根据@Archer的建议,我将$(window).load更改为$.getScript(=$.ajax),简化了一些内容,而且看起来速度更快:

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)