【问题标题】:Rails 'local-time' gem not running JSRails 'local-time' gem 没有运行 JS
【发布时间】:2021-03-30 23:08:12
【问题描述】:

我正在尝试使用 Basecamp 的 local-time gem。在自述文件之后,我添加了

//= require local-time

到我的 app/assets/config/manifest.js,现在看起来像这样:

//= link_tree ../images
//= link_directory ../stylesheets .css

//= require local-time

然后我按照规定使用宝石:

<%= local_time(comment.created_at) %>

根据自述文件呈现

<time data-format="%B %e, %Y %l:%M%P"
      data-local="time"
      datetime="2013-11-27T23:43:22Z">November 27, 2013 11:43pm</time>

自述文件还声称 JavaScript,即客户端,然后会将其转换为:

<time data-format="%B %e, %Y %l:%M%P"
      data-local="time"
      datetime="2013-11-27T23:43:22Z"
      title="November 27, 2013 6:43pm EDT"
      data-localized="true">November 27, 2013 6:43pm</time>

但我可以看到这不会发生在我身上。 local_time 生成的标记在 DOM 中保持不变。

其实“local”这个词在我的浏览器接收到的编译好的application.js中出现了0次。

宝石可能有问题,但现在我假设我做错了什么。我的 Ruby 代码似乎可以很好地找到和使用 gem,但由于某种原因,JS 部分永远不会运行。

我做错了什么?

编辑:我使用的是 Rails 版本 6.0.3.4、Ruby 版本 2.6.5p114 和本地时间版本 2.1.0。

【问题讨论】:

  • 你的app/javascript/packs/application.js 里有什么?
  • require("@rails/ujs").start() require("turbolinks").start() require("@rails/activestorage").start() require("channels") 在顶部——加上一些其他不相关的 JS。
  • 您可以尝试将您的需求放入 application.js 文件中,然后再试一次吗?
  • 我试过了,没有骰子。

标签: javascript ruby-on-rails ruby localtime


【解决方案1】:

Merovex 的回答是一个很好的临时解决方法,但根据paulanunda's comment on the GitHub issue,有一个更简单的方法:

$ yarn install local-time

不要弄乱 manifest.js 文件,只需将以下内容放入您的 application.js 文件中:

import LocalTime from 'local-time';
LocalTime.start();

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。这似乎在 Rails 6 之前有效。

    在 Rails 6 中,JavaScript 资产不再包含在 app/assets/ 目录中,而是被移动到由 Webpacker 处理的单独目录 app/javascript 中。这很好,但是当我想添加一些我自己的自定义 javascript 时,没有任何明确的文档描述应该如何完成。

    https://dev.to/morinoko/adding-custom-javascript-in-rails-6-1ke6

    在我的/app/javascript 文件夹中,我创建了一个子文件夹/app/javascript/helpers。在那个文件夹中,我直接从GH repo 放置了local-time.js。然后,我将以下代码添加到/app/javascript/packs/application.js

    import LocalTime from 'helpers/local-time'
    LocalTime.start()
    

    在我看来,截至我写作时,我是在五分钟前完成的

    <p>Time Ago: <%= local_time_ago(Time.now) %></p>
    

    读取

    Time Ago: 5 minutes ago
    

    【讨论】:

    • 这是一种解决方法。为了后代,我建议链接到 gem 当前版本中使用的特定 JS 文件here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    相关资源
    最近更新 更多