【问题标题】:Setting KeystoneJS Date format设置 KeystoneJS 日期格式
【发布时间】:2017-03-25 09:57:55
【问题描述】:

我似乎无法在我的 keystone JS 博客和其他页面上设置日期格式。

如果我在模板中使用 {{ publishedDate }}(我正在使用车把)一切都很好,只是它给了我这样的信息:Thu Mar 23 2017 00:00:00 GMT+0000(GMT 标准时间)这显然不好。

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

全部返回错误如下: 第 18 行的解析错误: ... post.publishedDate.format('D MMMM') }}

我也尝试过更改模型中的内容:

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

及其众多变体。我查看了位于 http://keystonejs.com/docs/database/#fieldtypes-date 的 keystone 文档,并尝试实现其中所说的内容,但仍然无法正常工作。

这实际上应该很简单,我敢肯定 - 我只是不知道该怎么做(!)

任何帮助表示赞赏。

【问题讨论】:

    标签: javascript date format keystonejs


    【解决方案1】:

    下划线方法存在于文档上,而不是属性上。您拥有的第二行代码应该可以工作; the format underscore function 将使用您想要的格式格式化 publishedDate 项目(如果您不提供参数,则默认为 Do MMM YYYY,但您可以通过向 format 提供参数来指定您自己的 Moment.js 格式)。

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

    只要将post 作为局部变量提供给您的Handlebars 模板(您的路由中的locals.post = post),就不会返回任何错误。

    编辑 2017 年 3 月 28 日

    在 Handlebars 中,您必须以不同于 Keystone 文档描述的方式将数据传递给函数。他们使用 Pug,因此您尝试做的事情将在 Pug 中工作。 Handlebars 以不同的方式评估功能。尝试{{post._.publishedDate.format "D MMMM"}} "D MMMM" 字符串被传递给格式,然后它就可以正常工作了。

    【讨论】:

    • 谢谢 Shea... 在女朋友家里的自动取款机,远离电脑。周二回到它,并将尝试实施这一点。再次欢呼。
    • 嗯...已经尝试过了,不幸的是没有任何区别。只是为了给你更多的背景信息,在我的路线中: var locals = res.locals; // 设置 locals locals.section = 'blog'; locals.filters = { post: req.params.post, }; locals.data = {帖子:[],}; locals.post = 发布;在模板中我有: {{ post._.publishedDate.format('D MMMM') }} 它仍然给我同样的错误 - 我错过了什么非常明显的东西?
    • 这可能与您的 Handlebars 模板中的空格有关。试试{{post._.publishedDate.format('D MMMM')}}
    • 不 - 已经尝试过了 - 我认为一些更基本的东西......我仔细检查了 package.json 和下划线 - 还有什么对它至关重要的吗?时刻或类似的东西?
    • 没关系,想通了!在 Handlebars 中,您必须以不同于 Keystone 文档描述的方式将数据传递给函数。试试{{post._.publishedDate.format "D MMMM"}}"D MMMM" 字符串传递给format 然后就可以正常工作了。
    【解决方案2】:

    感谢 Shea - 提供超出职责范围的帮助。非常感谢 ;-) 最终的解决方案(对于任何其他感兴趣的人)是 - 如果在循环中运行 - 在模型中创建一个虚拟,如下所示:

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

    然后,在车把模板中使用以下格式:

    {{formattedDate}}
    

    如果不在循环中运行,可以简单地使用:

    {{_.publishedDate.format "D MMMM"}}

    【讨论】:

      猜你喜欢
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2015-01-13
      • 1970-01-01
      • 2020-07-01
      相关资源
      最近更新 更多