У меня есть подробный ответ на этот вопрос, который занял у меня довольно много времени, я обновлю этот ответ подробностями в ближайшие дни, но он начинается с правильного подключения всего с jQuery, jQuery - Пользовательский интерфейс и сам компонент, который в данном случае является jqTree
Прямо определенно является ответом Начиная с командной строки для добавления соответствующих пакетов
yarn add jquery
yarn add jquery-ui
yarn add jqtree
После установки соответствующих пакетов пряжи мне нужно чтобы сделать jQuery и jQuery -ui доступными по причинам, которые мне еще предстоит полностью понять, простого требования недостаточно
После этого поста https://www.botreetechnologies.com/blog/introducing-jquery-in-rails-6-using-webpacker
Я настраиваю свою среду. Файл js в папке config/webpacker
выглядит следующим образом
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.prepend('Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
);
const aliasConfig = {
'jquery': 'jquery-ui-dist/external/jquery/jquery.js',
'jquery-ui': 'jquery-ui-dist/jquery-ui.js'
};
environment.config.set('resolve.alias', aliasConfig);
module.exports = environment
После перезапуска сервера я создал простой файл js с именем test. js в В папке app/javascript/packs
, которая, насколько я могу судить, сейчас находится все javascript, хотя все еще есть возможность использовать звездочки, поместив javascript в папку assets/javascript
, у меня есть без объяснения причин было рекомендовано смешивать веб-упаковщик со звездочками для подачи javascript. Webpacker также имеет возможность обслуживать таблицы стилей, однако я все же предпочитаю, чтобы мои таблицы стилей обслуживались звездочками в папке app / assets и использованием тегов ссылок таблиц стилей, как это традиционно делается в приложениях Rails, так как тестирование оказалось более эффективным в этом смысле, поэтому смешивание В этом случае звездочки с веб-упаковщиком, похоже, не проблема.
Я просто забросил простое предупреждающее сообщение в тестовый файл. js, просто чтобы проверить, что веб-упаковщик и jQuery все правильно подключены .
Итак, проверьте. js выглядит следующим образом
require("jquery-ui");
require("jqtree");
$(function() {
alert($('#tree1').data('items'));
});
Затем, чтобы использовать javascript, я просто включил тег javascript pack в представление, которое я хотел использовать в вот так.
при случайном редактировании. html .erb view
<h1>Editing Menu Item</h1>
<%= render 'form', menu_item: @menu_item %>
<%= link_to 'Show', [:admin, @menu_item] %> |
<%= link_to 'Back', admin_menu_items_path %>
<%=javascript_pack_tag("test")%>
Нет необходимости в путях или расширениях имени файла, просто работает!
Я нахожу этот подход действительно аккуратным по двум причинам:
1) Я не излишне раздуваю веб-страницы, включая спецификацию страницы c javascript на каждой странице, включая ее в приложение. * Файл 1063 *, который по умолчанию включается в макет и, следовательно, в каждую страницу.
2) Мне не нужно беспокоиться о событиях, загруженных DOM, и до сих пор никаких проблем с турболинками, мешающими ему, хотя Я подозреваю, что это скорее удача, чем суждение, и мне, возможно, придется пересмотреть эту мысль в будущем и использовать опцию 'data-turbolinks-track': 'reload'
, но пока все хорошо, и в этом нет необходимости.
Так что теперь что все подключено и работает, пришло время заставить компонент jqTree работать с гемом предков, чтобы иметь возможность структурировать и организовывать пункты меню для сайта,
Но до этого момента все было просто использования компонентов для установки пряжи и правильного подключения jQuery. Изначально я не использовал пряжу, и это привело меня ко всевозможным проблемам, которые привели к моему первоначальному вопросу.
Остальное последовать ...