【问题标题】:Rails UJS not firing with Rails 7Rails UJS 不使用 Rails 7 启动
【发布时间】:2023-02-10 19:17:00
【问题描述】:

我将我的 Rails 应用程序升级到 Rails 7。我知道 Turbolinks 和 Rails UJS 实际上被 Rails 7 中 Stimulus 和 Turbo 的 Hotwire 组合所取代,但我想知道我是否仍然可以使用 UJS,如果可以,为什么不能在职的?

我的不起作用的方法如下所示:

  submit(event) {
    this.errorTarget.classList.add("hidden")
    Rails.fire(this.formTarget, "submit")
    console.log('hi')
  }

console.log 有效。当我点击一个元素时,它曾经随着这段代码而改变,但现在它不再改变了。 Rails.fire 根本不再触发,当我检查网站时,日志或网络部分没有错误。

我觉得我在这里错过了一些重要的东西,但我不知道是什么。

【问题讨论】:

    标签: javascript ruby-on-rails ruby-on-rails-7 rails-ujs


    【解决方案1】:

    要将 rails-ujs 添加到 Rails 7,您应该执行以下步骤:

    1. 固定它,让应用程序知道要使用哪个包。在 bash 中输入:
      ./bin/importmap pin @rails/ujs
      

      现在你有配置/importmap.rb文件是这样的:

      pin "@rails/ujs", to: "https://ga.jspm.io/npm:@rails/ujs@7.0.1/lib/assets/compiled/rails-ujs.js"
      
      1. 现在将@rails/ujs 包含到您的javascript 中。在文件中javascript/控制器/application.js添加:
      import Rails from '@rails/ujs';
      
      Rails.start();
      
      1. 重新启动您的应用程序服务器

    【讨论】:

    • 您可能想使用 ./bin/importmap pin @rails/ujs@7 将其固定到版本 7。否则,您现在可能会加载 @rails/ujs@6。
    • 如果你不想在生产中使用 javascript CDN,你可以这样做:./bin/importmap pin @rails/ujs --download。这将在您的 config/importmap.rb 文件中添加一个条目,看起来像这样:pin "@rails/ujs", to: "@rails--ujs.js"
    • 截至目前,它确实引入了 ujs 7
    【解决方案2】:

    问题在于,在 Rails 6.x 中,表单是使用属性 data-remote="true" 自动生成的,而在升级到 Rails 7.x 后,这种情况不再发生。

    要恢复旧行为并让您的 Rails.fire 调用再次工作,您需要明确地将 data-remote="true" 添加到表单中。

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多