Жемчуг Rails «местного времени» не работает с JS

Я пытаюсь использовать гем местного времени от Basecamp. После Readme я добавил

//= require local-time

В мой app/assets/config/manifest.js, который теперь выглядит так:

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

//= require local-time

Затем я использую драгоценный камень, как предписано:

<%= local_time(comment.created_at) %>

Который, согласно Readme, отображает

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

В Readme также утверждается, что 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.

На самом деле слово «локальный» появляется 0 раз в скомпилированном application.js, который получает мой браузер.

Возможно, с камнем что-то не так, но пока я предполагаю, что делаю что-то не так. Мой код Ruby, кажется, отлично находит и использует драгоценный камень, но по какой-то причине часть JS никогда не запускается.

Что я делаю не так?

Обновлено: я использую версию Rails 6.0.3.4, версию Ruby 2.6.5p114 и версию 2.1.0 по местному времени.

Что у тебя в app/javascript/packs/application.js ?

Jad 22.12.2020 16:58
require("@rails/ujs").start() require("turbolinks").start() require("@rails/activestorage").start() require("channels") вверху — плюс еще несколько несвязанных JS.
Dennis Hackethal 22.12.2020 20:03

Можете ли вы попробовать поместить требование в файл application.js, а затем повторить попытку?

Jad 22.12.2020 23:01

Я пробовал это, без кости.

Dennis Hackethal 22.12.2020 23:03
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
5
4
778
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я столкнулся с той же проблемой. Кажется, это работает до Rails 6.

В Rails 6 активы JavaScript больше не включаются в каталог app/assets/ и вместо этого были перемещены в отдельный каталог app/javascript, обрабатываемый Webpacker. Это здорово, но когда я захотел добавить свой собственный javascript, не было четкой документации, описывающей, как это должно быть сделано.

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

В моей папке /app/javascript я создал подпапку /app/javascript/helpers. В эту папку я поместил local-time.js прямо из репозитория GH. Затем я добавил следующий фрагмент кода в /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

Это работает как обходной путь. Для потомков я рекомендую ссылку на конкретный JS-файл, используемый в текущей версии гема здесь.

Dennis Hackethal 01.01.2021 08:05
Ответ принят как подходящий

Ответ Меровекса был хорошим временным обходным путем, но, согласно комментарию paulanunda к проблеме GitHub, есть гораздо более простой способ:

$ yarn add local-time

И вместо того, чтобы возиться с файлом manifest.js, просто поместите следующее в файл application.js:

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

Другие вопросы по теме