Rails UJS link_to уничтожить действие не работает должным образом после миграции в веб-пакет

У меня есть проект с Rails/ веб-упаковщик / стимул. Сегодня я перенес конвейер активов в webpacker. Все прошло хорошо, за исключением одной детали.

Вместо этого кнопки Link_to с вызовом метода destroy направляются непосредственно к действию show. Также не работает тег remote:true. Действия ajax:beforeSend не запускаются, и окно подтверждения больше не загружается.

<%= link_to sanitize("<i class='fa fa-trash'></i>"), dashboard_manager_dashboard_path(dashboard), remote: true, method: :delete, data: {
                            confirm: "sure?",
                            action: 'ajax:beforeSend->dm--dashboard#onBeforeDelete ajax:success->dm--dashboard#onDelete'
                        } %>

Я обнаружил ряд подобных случаев в Stackru, и большинство из них упоминают, что Rails UJS загружен неправильно, что может показаться и здесь. Проблемы в этом примере, однако, не используют веб-пакет.

В некоторых публикациях в Stackru упоминается использование button_to вместо link_to. Но это не то решение, которое я ищу, я хочу иметь возможность использовать обратные вызовы remote:true и ajax.

Кто-нибудь видит недостаток в моей настройке? Спасибо заранее за любые предложения!

application.js:

import Rails from 'rails-ujs';
import Turbolinks from 'turbolinks';
import * as ActiveStorage from 'activestorage';

Rails.start();
Turbolinks.start();
ActiveStorage.start();

import "../src/import-jquery";
import 'bootstrap/dist/js/bootstrap';
import 'tempusdominus-bootstrap-4';
import '../src/bootstrap-select.js';
import '../src/custom_calender.js';
import '../src/functions.js';

import { Application } from "stimulus"
import { definitionsFromContext } from "stimulus/webpack-helpers"
const application = Application.start();
const context = require.context("controllers", true, /.js$/);
application.load(definitionsFromContext(context));

Package.json:

{
    "name": "Youba",
    "private": true,
    "version": "1.0",
    "dependencies": {
        "@babel/core": "^7.4.4",
        "@rails/ujs": "^6.0.0-alpha",
        "@rails/webpacker": "^4.0.2",
        "activestorage": "^5.2.3",
        "babel-loader": "^8.0.6",
        "bootstrap": "^4.3.1",
        "bootstrap-select": "^1.13.10",
        "choices.js": "^7.0.0",
        "jquery": "^3.4.1",
        "jquery-ui": "^1.12.1",
        "jquery-ujs": "^1.2.2",
        "moment": "^2.24.0",
        "moment-timezone": "^0.5.11",
        "popper": "^1.0.1",
        "popper.js": "^1.14.7",
        "rails-ujs": "^5.2.3",
        "stimulus": "^1.1.1",
        "tempusdominus-bootstrap-4": "^5.1.2",
        "tempusdominus-core": "5.0.3",
        "turbolinks": "^5.2.0",
        "webpack": "^4.0.0",
        "webpack-cli": "^3.3.2"
    },
    "devDependencies": {
        "webpack-dev-server": "^3.2.1"
    }
}

environment.js

const {environment} = require('@rails/webpacker');

const webpack = require('webpack');
environment.plugins.append('Provide', new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery',
    jquery: 'jquery',
    Popper: ['popper.js', 'default']
}));

module.exports = environment;

0 ответов

Возможно, уже слишком поздно, но у меня была аналогичная проблема при изучении рельсов. Я обнаружил, что не включил строку
= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload'
в app/assets/layouts/application.html.haml

У меня была такая же проблема в моей ситуации, потому что я создал application.scss в app/javascript/pack/

Если я перемещу файл.scss в таблицу стилей, все работает нормально)

Другие вопросы по тегам