Uncaught ReferenceError: jstz is not defined

Uncaught ReferenceError: jstz is not defined

您好,我正在使用 webpacker 开发 Rails 6 的应用程序,出现以下 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 -%>

请帮我解决这个问题我纠结了很久,真的很费时间。

而不是包含 jstz 我认为如果你让 yarn 漫画插件更好。 要完成这项工作,您应该在文件中编写脚本,然后将其包含在视图中:

// 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 可以通过添加到你的 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 -%>

这也可以通过 Luxon 包来完成:

  1. 安装 yarn add luxon

  2. import {DateTime} from "luxon"; 添加到 application.js(如果您在 Rails 中使用 Webpacker)

  3. 创建一个 Javascript 变量以使用 DateTime 查找本地时间:

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

“z”格式将显示与 jstz.determine() 方法相同的字符串