Настройка формата даты KeystoneJS

Кажется, я не могу установить формат даты в своем блоге Keystone JS и на других страницах.

Если я использую {{PublishDate}} в шаблоне (я использую руль), все в порядке, за исключением того, что это дает мне что-то вроде этого: Чт, 23 марта 2017 г., 00:00:00 GMT+0000 (стандартное время по Гринвичу), что, очевидно, не хорошо.

{{ post.publishedDate.format('D MMMM') }}
{{ post._.publishedDate.format('D MMMM') }}
{{ publishedDate.format('D MMMM') }}

Все возвращают следующую ошибку: Ошибка синтаксического анализа в строке 18: ... post.publishedDate.format('D MMMM') }}‹ -------------------- ---^ Ожидание "ID", получено "INVALID"

Я также пытался изменить вещи в модели:

publishedDate: { type: Types.Date, index: true, format: 'YYYY', dependsOn: { state: 'published' }},

И многочисленные их вариации. Я просмотрел документацию по keystone по адресу: http://keystonejs.com/docs/database/#fieldtypes-date и пытались реализовать то, что там написано, но это все еще не работает.

На самом деле это должно быть очень просто, и я уверен, что это так - я просто не знаю, как это сделать (!)

Любая помощь приветствуется.


person Stef    schedule 25.03.2017    source источник


Ответы (2)


Методы подчеркивания существуют в документе, а не в свойстве. Вторая строка кода должна работать; функция format подчеркивания отформатирует элемент publishedDate в нужном формате (по умолчанию Do MMM YYYY если вы не укажете аргумент, но вы можете указать собственное форматирование Moment.js, указав аргумент для format).

{{ post._.publishedDate.format('D MMMM') }}

Пока post предоставляется как локальная переменная для вашего шаблона Handlebars (locals.post = post в вашем маршруте), это не должно возвращать никаких ошибок.

ИЗМЕНИТЬ 28 марта 2017 г.

В Handlebars вы должны передавать данные функциям способом, отличным от описанного в документации Keystone. Они используют Pug, поэтому то, что вы пытаетесь сделать, будет работать в Pug. Handlebars оценивает функции по-разному. Попробуйте {{post._.publishedDate.format "D MMMM"}} Строка "D MMMM" передается в формат, и тогда все работает нормально.

person Shea Hunter Belsky    schedule 25.03.2017
comment
Спасибо, Ши... В домашнем банкомате подруги и вдали от компьютера. Вернемся к этому во вторник и постараемся реализовать это. Удачи снова. - person Stef; 26.03.2017
comment
Хм... попробовал это и, к сожалению, ничего не изменилось. Просто чтобы дать вам немного больше контекста, в маршруте у меня есть: var locals = res.locals; // Установить местные жители locals.section = 'blog'; locals.filters = { сообщение: req.params.post, }; locals.data = {сообщения: [], }; locals.post = сообщение; и в шаблоне у меня есть: {{ post._.publishedDate.format('D MMMM') }} Это все еще дает мне ту же ошибку - что-то действительно очевидное, что я упускаю? - person Stef; 28.03.2017
comment
Возможно, это связано с пробелами в вашем шаблоне Handlebars. Попробуйте {{post._.publishedDate.format('D MMMM')}} - person Shea Hunter Belsky; 28.03.2017
comment
Нет - уже пробовал - что-то более фундаментальное, я думаю... Я дважды проверил package.json, и там есть подчеркивание - есть ли что-то еще, что важно для него? Момент или что-то в этом роде? - person Stef; 28.03.2017
comment
Ничего себе, разобрался! В Handlebars вы должны передавать данные функциям способом, отличным от описанного в документации Keystone. Попробуйте {{post._.publishedDate.format "D MMMM"}} Строка "D MMMM" передается format, и тогда все работает нормально. - person Shea Hunter Belsky; 28.03.2017
comment
Аааа... вот мы и добрались :-) Сделал, как вы сказали, и теперь я получаю другую ошибку (я думаю, это прогресс!) :-) Теперь он говорит: Отсутствует помощник: publishDate.format ... I' я где-то читал об этом (да, я очень новичок в keystone!)... но как добраться... это просто случай игры с index.js в папке помощников? - person Stef; 28.03.2017
comment
Это не должно быть необходимо; если post является прямым результатом запроса мангуста, у него должен быть помощник подчеркивания. {{post._.publishedDate.format "D MMMM"}} и {{{post._.publishedDate.format "D MMMM"}}} не работают? Приходите в этот чат Stack Overflow, который упрощает живое общение. . - person Shea Hunter Belsky; 28.03.2017

Спасибо Ши - помощь сверх служебного долга. Очень признателен ;-) Окончательное решение (для всех, кто заинтересован) заключалось в том, что при работе в цикле было создано виртуальное в модели следующим образом:

Post.schema.virtual('formattedDate').get(function () { 
    return this._.publishedDate.format("D MMMM"); 
});

а затем в шаблоне руля используйте следующий формат:

{{formattedDate}}

Если не работает в цикле, это можно сделать просто с помощью:

{{_.publishedDate.format "Д ММММ"}}

person Stef    schedule 28.03.2017