首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JS模块中使用Rails-UJS (带有webpacker的Rails 6)

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

Stack Overflow用户
提问于 2019-05-14 10:17:59
回答 5查看 17.7K关注 0票数 39

我刚刚切换到Rails 6 (6.0.0.rc1),默认情况下,它与Rails-UJS一起使用网络包商 gem。我希望在我的一些模块中使用Rails UJS来提交来自以下函数的表单:

代码语言:javascript
复制
const form = document.querySelector("form")
Rails.fire(form, "submit")

在安装了Webpacker的以前的Rails版本中,Rails引用在我的模块中似乎是“全局可用的”,但是现在我在调用Rails.fire…时得到了这一点。

代码语言:javascript
复制
ReferenceError: Rails is not defined

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

在我设置的…下面

app/javascript/controllers/form_controllers er.js

代码语言:javascript
复制
import { Controller } from "stimulus"

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

app/javascript/controllers.js

代码语言:javascript
复制
// 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))

app/javascript/packs/application.js

代码语言:javascript
复制
require("@rails/ujs").start()
import "controllers"

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-08-18 11:00:48

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

代码语言:javascript
复制
import Rails from '@rails/ujs';
Rails.start();

然后在我所写的任何模块,控制器,组件中:

代码语言:javascript
复制
import Rails from '@rails/ujs';
票数 55
EN

Stack Overflow用户

发布于 2019-09-30 04:21:48

首先,使用纱线添加rails/ujs:

代码语言:javascript
复制
yarn add  @rails/ujs

并添加到config/webpack/Environ.js中。

代码语言:javascript
复制
const webpack = require('webpack')
environment.plugins.prepend('Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
    Popper: ['popper.js', 'default'],
    toastr: 'toastr/toastr',
    ApexCharts: ['apexcharts', 'default'],
    underscore: ['underscore', 'm'],
    Rails: ['@rails/ujs']
  })
)
module.exports = environment

配置和加载Rails js。

代码语言:javascript
复制
# pack/application.js
require("@rails/ujs").start()
global.Rails = Rails;

然后:这是结果->

票数 20
EN

Stack Overflow用户

发布于 2019-06-10 22:09:35

只需将其添加到您的environment.js文件中,下面是我的(使用引导程序和jquery):

代码语言:javascript
复制
const {environment} = require('@rails/webpacker')
const webpack = require('webpack')

module.exports = environment

environment.plugins.prepend(
    'Provide',
    new webpack.ProvidePlugin({
        $: 'jquery',
        jQuery: 'jquery',
        jquery: 'jquery',
        'window.jQuery': 'jquery',
        "window.$": "jquery",
        Popper: ['popper.js', 'default'],
        Rails: ['@rails/ujs']
    })
)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56128114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档