ruby-on-rails - 在 JS 模块中使用 Rails-UJS(带有 webpacker 的 Rails 6)

标签 ruby-on-rails webpack webpacker rails-ujs

我刚刚切换到使用 Webpacker 的 Rails 6 (6.0.0.rc1) Javascript Assets 和 Rails-UJS 的默认 gem。我想在我的一些模块中使用 Rails UJS,以便从具有以下功能的函数提交表单:

const form = document.querySelector("form")
Rails.fire(form, "submit")

在安装了 Webpacker 的旧 Rails 版本中,Rails引用似乎在我的模块中“全局”可用,但现在我在调用 Rails.fire 时得到了这个…
ReferenceError: Rails is not defined

如何制作 Rails来自 @rails/ujs可用于特定或我的所有模块?

在我的设置下面…

应用程序/javascript/controllers/form_controller.js
import { Controller } from "stimulus"

export default class extends Controller {
  // ...
  submit() {
    const form = this.element
    Rails.fire(form, "submit")
  }
  // ...
}

应用程序/javascript/controllers.js
// Load all the controllers within this directory and all subdirectories. 
// Controller files must be named *_controller.js.

import { Application } from "stimulus"
import { definitionsFromContext } from "stimulus/webpack-helpers"

const application = Application.start()
const context = require.context("controllers", true, /_controller\.js$/)
application.load(definitionsFromContext(context))

应用程序/javascript/packs/application.js
require("@rails/ujs").start()
import "controllers"

谢谢!

最佳答案

在我的app/javascript/packs/application.js :

import Rails from '@rails/ujs';
Rails.start();

然后在我正在编写的任何模块、 Controller 、组件中:
import Rails from '@rails/ujs';

关于ruby-on-rails - 在 JS 模块中使用 Rails-UJS(带有 webpacker 的 Rails 6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56128114/

相关文章:

css - 使用 Bootstrap 和 Rails 设计复选框样式?

reactjs - 有没有办法热构建 React 来与 Django 一起使用?

javascript - WebPacker - 通过 ES6 Import 与 webpack.ProvidePlugin() 加载 NPM 模块

ruby-on-rails - Webpacker 部署到生产环境时未为 Rails 5.2 中的某些应用程序创建 list

ruby-on-rails - 在docker-compose up --build之后,Webpacker manifest.json恢复为旧 Assets 引用

mysql - 如何使用Rails手动连接MYSQL数据库?

mysql - ARCHFLAGS 不接受命令(Snow Leopard 上的 MySQL 64 位 ruby​​ gem 安装问题)

ruby-on-rails - 禁用 rake 任务

javascript - 在不明确要求 Assets 的情况下将 webpack 与 jade-loader 一起使用

visual-studio - Webpack 1.x 热模块替换模块不更新