Использование Rails-UJS в модулях JS (Rails 6 с веб-упаковщиком) - PullRequest
4 голосов
/ 14 мая 2019

Я только что перешел на Rails 6 (6.0.0.rc1), который по умолчанию использует гем Webpacker для ресурсов Javascript вместе с Rails-UJS. Я хочу использовать Rails UJS в некоторых моих модулях для отправки форм из функции с:

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

В прежних версиях Rails с установленным Webpacker ссылка Rails, казалось, была "глобально" доступна в моих модулях, но теперь я получаю это при вызове Rails.fire

ReferenceError: Rails is not defined

Как я могу сделать Rails из @rails/ujs доступным для определенного или для всех моих модулей?

Ниже моей настройки ...

приложение / JavaScript / контроллеры / 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 / пакеты / application.js

require("@rails/ujs").start()
import "controllers"

Спасибо!

1 Ответ

2 голосов
/ 11 июня 2019

Просто добавьте его в свой файл environment.js, вот мой (с начальной загрузкой и jquery):

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']
    })
)
...