Неперехваченная ошибка ссылки: jstz не определен

#javascript #jquery #ruby-on-rails #webpack #ruby-on-rails-6

#javascript #jquery #ruby-on-rails #webpack #ruby-on-rails-6

Вопрос:

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

     Uncaught ReferenceError: jstz is not defined
    at HTMLDocument.<anonymous> ((index):62)
    at fire (jquery.js:975)
    at Object.fireWith [as resolveWith] (jquery.js:1085)
    at Function.ready (jquery.js:407)
    at HTMLDocument.DOMContentLoaded (jquery.js:84)
  

Я вижу, что webpacker успешно скомпилирован

 Entrypoint application = js/application-7e55ed0e528c94e39f58.js js/application-7e55ed0e528c94e39f58.js.map
Entrypoint cookie = js/cookie-f1267dd65b07bdb515fe.js js/cookie-f1267dd65b07bdb515fe.js.map
Entrypoint jquery = js/jquery-08b07c2f819304da36bb.js js/jquery-08b07c2f819304da36bb.js.map
Entrypoint jstz = js/jstz-e4a49c2bcb34d7327712.js js/jstz-e4a49c2bcb34d7327712.js.map
Entrypoint require = js/require-bbf43dd046c0adca977d.js js/require-bbf43dd046c0adca977d.js.map
  
 [./app/javascript/channels/index.js] 211 bytes {application} [built]
[./app/javascript/packs/application.js] 1.46 KiB {application} [built]
[./app/javascript/packs/cookie.js] 737 bytes {cookie} [built]
[./app/javascript/packs/jquery.js] 289 KiB {jquery} [built]
[./app/javascript/packs/jstz.min.js] 5.93 KiB {jstz} [built]
[./app/javascript/packs/require.js] 25.8 KiB {require} [built]
  

я использую jstz в моем файле просмотра, как показано ниже

 <%= javascript_pack_tag 'jstz'  %>
<%= javascript_tag do -%>
jQuery(document).ready(function () {
  jQuery('#user_name').focus();
  jQuery('#user_time_zone').val(jstz.determine().name());
});

<% end -%>
  

пожалуйста, помогите мне решить эту проблему, я долгое время борюсь, это действительно отнимает больше времени.

Ответ №1:

Вместо включения jstz я думаю, будет лучше, если вы разрешите yarn плагин manga для вас. Чтобы выполнить эту работу, вы должны написать скрипт в файле, а затем включить в представление:

 // file something.js
const jstz = require('packs/jstz.min.js');
$(document).ready(function () {
  $('#user_name').focus();
  $('#user_time_zone').val(jstz.determine().name());
});
  

в поле зрения:

 <%= javascript_pack_tag 'something'  %>
  

или вы можете сделать jstz can вызов глобальным, добавив в свой appliation.js:

 const jstz = require('packs/jstz.min.js');
window.jstz = jstz
  

в поле зрения:

 <%= javascript_tag do -%>
jQuery(document).ready(function () {
  jQuery('#user_name').focus();
  jQuery('#user_time_zone').val(jstz.determine().name());
});

<% end -%>
  

Комментарии:

1. Привет, как вы и предлагали, я управлял jstz с помощью плагина yarn, который у меня сработал., спасибо за предложение 🙂

Ответ №2:

Это также может быть выполнено с помощью пакета Luxon:

  1. Установить с yarn add luxon

  2. Добавить import {DateTime} from "luxon"; в application.js (если вы используете Webpacker в Rails)

  3. Создайте переменную Javascript для определения локального времени с помощью DateTime:

    let tz = DateTime.local().toFormat('z')

Формат «z» будет отображать ту же строку, что и jstz.determine() метод