Rails 6 application.js Функции не найдены - PullRequest
0 голосов
/ 02 ноября 2019

Я просто тестирую вещи в приложении на 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 файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...