Как вы можете передать параметры конфигурации в flat pickr в Rails?

#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, и теперь это работает. Спасибо.