#javascript #ruby-on-rails #date
#javascript #ruby-on-rails #Дата
Вопрос:
У меня есть эта форма, в которой я пытаюсь реализовать flatpickr.js . Мне удалось заставить календарь работать, и он сохраняет дату, как ожидалось, но, похоже, я не могу заставить его использовать параметры конфигурации, которые я передаю в наборе данных (мне специально нужно иметь возможность выбирать время в дополнение к датам).
Это поле ввода HTML:
<%= f.text_field :authorized_at, data: { controller: "flatpickr", attributes: {enableTime: true, dateFormat: "Y-m-d H:i"} }, placeholder: "aaaa-mm-dd" , class: "form-control" %>
И в flatpickr.js контроллер, у меня есть это:
import { Controller } from 'stimulus';
import flatpickr from 'flatpickr';
export default class extends Controller {
connect() {
let config = this.element.dataset.attributes
console.log("Hello flatpickr")
flatpickr(this.element, {config});
}
}
Ведение журнала консоли this.element.dataset.attributes
эффективно возвращает хэш с соответствующими параметрами, но календарь в представлении не отображает средство выбора времени.
Какие-либо подсказки о том, чего мне не хватает?
Мне удается заставить его работать, передавая параметры непосредственно в хэш контроллера следующим образом:
flatpickr(this.element, {enableTime: true, dateFormat: "Y-m-d H:i"});
Но сохранение набора данных атрибутов в переменной и передача этого не работает.
РЕДАКТИРОВАТЬ: Хорошо, итак, проблема заключалась в том, что набор данных атрибутов отправлял ключи в виде строк, тогда как ожидался объект js.
Поэтому мне пришлось вызвать JSON.parse и передать набор данных, чтобы преобразовать его обратно, и это сработало:
connect() {
let config = JSON.parse(this.element.dataset.attributes)
console.log("Hello flatpickr")
flatpickr(this.element, config);
}
Комментарии:
1. Насколько я знаю, вы должны передавать имя класса в качестве первого аргумента, а не сам элемент.
2. Мне удалось заставить его работать, используя параметры непосредственно в хэше контроллера. Но передача ему переменной, хранящей хэш параметров, не работает.
3. может быть, потому, что вы заключили переменную конфигурации в
{}
саму себя. итак, в итоге у вас был хэш внутри хэша?4. Кроме того, передавая параметры непосредственно в контроллер, я использую символы {Enablet time: true, DateFormat: «Y-m-d H: i»}); в то время как консоль, регистрирующая набор данных, возвращает строки вместо символов {«Enablet time»:true,»DateFormat»:»Y-m-dH: i»} . Может быть, в этом проблема
5. Я использовал JSON.parse для преобразования набора данных атрибутов в объект js, и теперь это работает. Спасибо.