События jquery не запускаются с использованием webpacker и coffeescript

Попытка создать новое приложение rails 6 с нуля, чтобы заменить приложение rails 5.2. Попытка использовать webpacker с jquery и coffeescript на сайте Foundation

После кучи поисков я все загрузил с помощью webpacker. Это кажется очень (может быть, слишком) гибким в том, что в примерах используются разные подходы.

Все работает (фундамент делает x-сетку, выноски и т. Д., Загружает jquery, и я могу регистрировать объекты jquery, компилируется coffeescript), за исключением событий jquery, похоже, не запускает или не создает слушателя.

приложение / javascript / pack / application.js

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")
require('jquery')

import "foundation-sites"
require("../src/application")
require("../src/coffee/application.coffee")


$(document).on('turbolinks:load', function() {
  $(document).foundation()
});

приложение / javascript / src / application.scss

@import './foundation/foundation.scss';

конфигурация / webpack / environment.js

const { environment } = require('@rails/webpacker')
const coffee =  require('./loaders/coffee')

const webpack = require('webpack')
environment.plugins.prepend('Provide',
  new webpack.ProvidePlugin({
    $: 'jquery',
    jQuery: 'jquery'
  })
)

environment.loaders.prepend('coffee', coffee)
module.exports = environment

корневая тестовая страница index.slim

.grid-container
  .grid-x.grid-margin-x
    .small-4.cell
      h1 Home#index
      p Find me in app/views/home/index.html.slim
    .small-4.cell
      p and something over here?
    .small-4.cell
      p and more over here?
  .callout.alert
    | and maybe an alert

  .callout.notice

    button#test_button.button I be a button

приложение / JavaScript / SRC / кофе / application.coffee

import './hello_coffee.coffee';
import './test_button.coffee';

приложение / JavaScript / SRC / кофе / test_button.coffee

console.log "looking for a button"

jQuery ->
  console.log $('#test_button')
  $('#test_button').on 'click', (e) ->

    alert "I see you be a button"
    console.log "should only see if test button clicked"

Загрузится страница корневого тестового индекса. Он регистрирует "поиск кнопки" перед функцией jQuery. Он регистрирует объект jquery #test_button. Тестовая кнопка не реагирует на .on щелчок. Предупреждение или другие сообщения консоли не появляются. Думаю, я пробовал просто .click и без ответа

Как вы понимаете, мне не нравятся фигурные скобки, HTML-теги и т. Д. (Slim и coffee). У меня много coffeescript, и я действительно не хочу что-то менять.

Не очень хорошо использовать веб-инспектор для отладки (сафари), но кое-что есть, просто не могу или не знаю, как найти слушателей

Любая идея, что мне не хватает, что события не загружаются / не запускаются?

Дополнительная информация:

Я сдался. Webpacker, похоже, обрабатывает свободный JavaScript иначе, чем конвейер ресурсов. Почти весь мой javascript (coffescript) - это UJS. (есть ли элемент DOM, класс, поведение и т. д.), затем добавьте слушателя, который будет обрабатывать его, если он был нажат, изменен и т. д.

Я что-то делаю неправильно и потратил больше времени, пытаясь заменить то, что работает, на то, что должно было быть лучше. Мне придется подождать, пока еще больше людей не запутаются, и кто-то другой укажет на разницу. Webpacker больше подходит для одностраничных JS-приложений, и я этим не занимаюсь.

Я пробовал убрать из уравнения разные вещи. Использовал события DOM вместо jQuery. удалить фундамент и т. д. и т. д. Ошибок на консоли js нет. Я даже нашел, где посмотреть, какие слушатели работают, а мой есть, просто не реагирует на щелчок. Может быть, потому что это просто новое приложение-оболочка в режиме разработки.

РЕДАКТИРОВАТЬ

Я нашел проблему, но решения нет!

Я начал с нуля с новым приложением, но добавлял свои требования (coffeescript, базовые сайты (зависит от jQuery) по одному шагу за раз.

Я создал домашнюю страницу с тремя кнопками щелчка. По одному на каждый чистый javascript, coffeescript и jquery. Есть еще одна кнопка для перезагрузки страницы с помощью rails.ujs

.grid-container
  .grid-x.grid-margin-x
    .small-4.cell
      p Left column: Find me in app/views/home/index.html.slim
    .small-4.cell
      p Middle column: and something over here?
    .small-4.cell
      p Right column: and and more over here?
  .callout.alert
    p#jsbutton.button Javascript Button
  .callout.warning
    p#csbutton.button Coffeescript Button
  .callout.success#jqbutton
    p#jqbutton.button Jquery Button

  p= link_to "Reload",root_path, data: { confirm: 'Reload: Are you sure?' }, class: :button

Затем я добавил обработчики по одному в пакет для обработки каждой кнопки. Обработчик кликов javascript работал из коробки (до добавления coffeescript и jquery). Добавлен загрузчик coffeescript и кнопка заработала. Добавлен jquery, и все кнопки заработали. Домашний тонкий файл был настроен для фундаментной сетки, но фундамент не был загружен, поэтому это были просто div и p

Затем я установил сайты-основы с помощью пряжи и настроил файл pack / application.js, как показано ниже:

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")

require("./js/jsbutton.js")
require("./coffee/hello_coffee.coffee")
require("./coffee/csbutton.coffee")
require("./jquery/jqbutton.coffee")

import "foundation-sites"
import './scss/foundation.scss';

$(document).on('turbolinks:load', function() {
  $(document).foundation()
})

Фундаментная сетка предстала во всей красе, но ни одна из кнопок не реагировала на нажатия. У всех есть обработчики событий щелчка. Кнопка перезагрузки (rails.js) ответила подтверждающим сообщением.

Я решил пойти на сайт фонда и поискать помощь, проблема в том, что сайты фонда могут быть умирает !!!

Есть надежда, что все вернется на круги своя, но пока я сомневаюсь, что смогу получить какую-либо помощь.


person appleII717    schedule 28.09.2019    source источник
comment
Можете ли вы попробовать прикрепить слушателя к элементу верхнего уровня, например. $('body').on 'click', '#test_button', (e) -> ... и посмотреть, работает ли это?   -  person mutil    schedule 28.09.2019
comment
Это сработало! Получено предупреждение и сообщение журнала! Что-то не так с селектором идентификаторов? Собирался избавиться от турбо-ссылок, обычно избавляюсь от него, так как у него есть проблемы с множеством вещей (фундамент), но еще не пробовал.   -  person appleII717    schedule 28.09.2019
comment
Убрать турбо-ссылки с картинки не помогло. нажатие кнопки по-прежнему не работает с использованием селектора идентификатора   -  person appleII717    schedule 28.09.2019
comment
Проблема в том, что #test_button еще не существует, когда вы присоединяете прослушиватель событий. Может быть, поместив слушателя внутрь$(document).on('turbolinks:load') или $(document).ready() это исправит.   -  person mutil    schedule 28.09.2019
comment
Пробовал другую версию без особого удовольствия. Если вы посмотрите на test_button.coffee, я регистрирую #test_button. На самом деле я установил для него переменную и использовал ее при нажатии. Поэтому он должен быть загружен, если я могу зарегистрировать его, прежде чем прикрепить к нему слушателя. Если только слушатель не в каком-то странном порядке   -  person appleII717    schedule 29.09.2019
comment
Вы по ошибке добавляете пустую строку перед alert в test_button.coffee? Насколько я помню coffee синтаксис, этого быть не должно.   -  person Lyzard Kyng    schedule 29.09.2019
comment
В coffeescript могут быть пустые строки. Добавил дополнительную информацию при редактировании постов   -  person appleII717    schedule 29.09.2019


Ответы (1)


С помощью Foundation и Webpacker о проблеме, решение было найдено. Это была не моя конфигурация для webpacker или использования foundation, а простая настройка scss, которая устанавливала z-index класса .callout на -1. Это привело к тому, что событие щелчка никогда не достигло кнопки. Что-то, что я добавил несколько лет назад, чтобы не допустить, чтобы выпадающее меню происходило за выноской,

По крайней мере, у меня есть шаблонный пример того, как использовать Foundation в приложении Rails 6 с помощью webpacker.

person appleII717    schedule 07.10.2019
comment
Есть ли шанс, что вы можете рассказать, как настроить Foundation 6 в Rails 6? Я провожу все эти поиски прямо сейчас, и вы правы, они могут сбивать с толку. - person Chris Valentine; 10.10.2019
comment
Вопрос более-менее прошел через процесс. В то время я хоть и был, но возникли другие проблемы. Я должен указать на турбо-ссылки, я попытался установить верхнюю панель, и она всегда загружается только небольшими (гамбургер). текущая демонстрация находится на демонстрации пакета github. Если когда-нибудь разберусь, добавлю в уценку - person appleII717; 13.10.2019
comment
Простые вещи работали, а вот Sticky - нет. В конце концов, я сдался и установил фундамент в трубопроводе активов, используя для драгоценного камня рельсы фундамента. Он сосуществует с webpaker. Даже использовать webpacker для jQuery - person appleII717; 16.10.2019