Я просто тестирую вещи в приложении на Rails 6, и если я помещаю функцию в файл app / javascript / packs / application.js, я получаю ошибку Uncaught ReferenceError: is notfined.
ЕслиЯ поместил следующий код в мой файл html.erb:
<%= button_tag "Test", class: 'btn btn-primary', onClick: 'test_func()' %>
...
<script>
function test_func() {
console.log("test works");
}
</script>
Он работает как надо. Но если я помещаю тот же код в файл app / javascript / packs / application.js, то получаю неперехваченную ссылку. Функция должна быть там, потому что если я просматриваю файл packs / js / application * .js, то могу найти следующее:
/***/ "./app/javascript/packs/application.js":
/*!*********************************************!*\
!*** ./app/javascript/packs/application.js ***!
\*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You're encouraged to place your actual application logic in
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.
__webpack_require__(/*! bootstrap/dist/js/bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.js");
__webpack_require__(/*! @rails/ujs */ "./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js").start();
__webpack_require__(/*! turbolinks */ "./node_modules/turbolinks/dist/turbolinks.js").start();
__webpack_require__(/*! @rails/activestorage */ "./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js").start();
__webpack_require__(/*! channels */ "./app/javascript/channels/index.js"); // Uncomment to copy all static images under ../images to the output folder and reference
// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)
// or the `imagePath` JavaScript helper below.
//
// const images = require.context('../images', true)
// const imagePath = (name) => images(name, true)
function test_func() {
console.log("test works");
}
/***/ })
Так что я не уверен, в чем может быть проблема. Любая помощь будет оценена. Спасибо!
РЕШЕНИЕ:
Я нашел обходной путь для решения этой проблемы. В файле app/javascriipts/packs/application.js
вместо объявления функции как:
function test_func() {
console.log("test works");
}
Объявите функцию следующим образом:
window.test_func = function() {
console.log("test works);
}
И функция теперь будет доступна глобально из html. erb файлы.