Turbolinks 5:在特定页面中添加来自其他站点的外部javascript文件

Turbolinks 5:在特定页面中添加来自其他站点的外部javascript文件,javascript,ruby-on-rails,turbolinks,ruby-on-rails-5,Javascript,Ruby On Rails,Turbolinks,Ruby On Rails 5,我正在使用,对于某些特定的页面,我想加载一个外部javascript文件 在我的示例中,我有一个联系人页面,我希望通过加载GoogleMapsAPI来显示地图。访问根页面时不应加载它,但稍后单击联系人页面的链接后应将其包含在内 曾在Turbolinks 2工作。但似乎不再有效了 可以检查javascript是否已经加载,如果需要,可以异步加载 大概是这样的: loadScript = (src, callback) -> script = document.createElement(

我正在使用,对于某些特定的页面,我想加载一个外部javascript文件

在我的示例中,我有一个联系人页面,我希望通过加载GoogleMapsAPI来显示地图。访问根页面时不应加载它,但稍后单击联系人页面的链接后应将其包含在内

曾在Turbolinks 2工作。但似乎不再有效了

可以检查javascript是否已经加载,如果需要,可以异步加载

大概是这样的:

loadScript = (src, callback) ->
  script = document.createElement("script")
  script.type = "text/javascript"
  script.onload = callback if callback
  document.getElementsByTagName("head")[0].appendChild(script)
  script.src = src

initialize = ->
  # init map here

load = ->
  if $('#gmap').size > 0
    if typeof(google) == 'function'
      initialize()
    else
      loadScript 'https://maps.googleapis.com/maps/api/js?&callback=initialize'

$(document).on 'turbolinks:load', -> load()
这是处理这个问题的唯一方法还是有更简单的方法?

现在你可以试试

它是为特定于页面的JavaScript片段而生的

  • 添加一个新的脚本标记,如
  • 在merchant文件中,您可以依靠刺激来处理TurboLink和jquery ready的事件
您甚至可以使用webpack和es6

// hello_controller.js
import { Controller } from "stimulus"

export default class extends Controller {
  static targets = [ "name", "output" ]

  greet() {
    this.outputTarget.textContent =
      `Hello, ${this.nameTarget.value}!`
  }
}

看看阿尔菲内斯。它就是为此而建的。根据文件,

Alpine.js为您提供了big的反应性和声明性特性 Vue等框架的反应成本要低得多。你得保持冷静 您的DOM,并在您认为合适的情况下添加行为。想一想 JavaScript的顺风


Mordaroso根据以下评论,您的解决方案很好:。我们可以在turbolinks gem中打开一个PR,它将添加一个带有您发布的代码的helper JavaScript函数,以便开发人员可以轻松使用它,否则将创建一个新的gem来发布此helper。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-明白了。我是新来的,仍在努力适应。