У меня есть довольно стандартное приложение на Rails 5.2 (соответствует практически всем соглашениям), использующее пряжу и веб-упаковщик, с версией стимула 1.1.1
в моем файле package.json
и yarn.lock
.
# package.json
{
"name": "MY_APP_NAME",
"private": true,
"dependencies": {
"@rails/webpacker": "^4.0.2",
"coffeescript": "1.12.7",
"stimulus": "^1.1.1"
},
"devDependencies": {
"webpack-dev-server": "^3.2.1"
}
}
FromНа странице StimulusJS Discourse (https://discourse.stimulusjs.org/t/stimulusjs-and-turbolinks/669), начиная со Stimulus 1.1
, контроллеры стимулов выполняют методы подключения / инициализации после того, как DOM готов с турболинками.
Однако единственным способом, которым я мог заставить приведенный ниже контроллервыполнить правильно - добавить обработчик события, чтобы дождаться, пока не сработает событие turbolinks:load
.
Если это важная информация, я пытаюсь использовать плагин jQuery Select2 для создания настраиваемого элемента select.
# app/javascript/packs/controllers/intake_customization_controller.js
import { Controller } from "stimulus";
export default class extends Controller {
static targets = [ "userIds" ]
initialize() {
// Code will not execute without this event handler wrapping it...
$(document).on("turbolinks:load", ()=> {
$(this.userIdsTarget).select2()
})
}
}
HTML-форма:
<%= form_with model: @account, url: settings_intake_customization_path, method: :put, id: "settings-intake_customization-form", data: { controller: "intake-customization" } do |form| %>
<%= form.collection_select :user_ids, current_account.users, :id, :name, { include_blank: false }, { multiple: true, data: { target: "intake-customization.userIds" } } %>
<% end %>
Я что-то упустил при настройке контроллера стимула с турболинками?
Используя обработчик событий turbolinks:load
, я могу получить функциональностьЯ хочу, но из того, что я прочитал на форуме Discourse, мне не нужно было использовать обработчик событий.
Возможно ли, что мое приложение "кэшировало" более старую версию Sтимулус, хотя package.json
говорит иначе?