无法格式化keystone.js中的嵌套日期字段

时间:2015-03-30 15:48:07

标签: javascript underscore.js momentjs swig-template keystonejs

我正在扩展keystone.js以支持模型中的多种语言。

原始模型如下所示:

Post.add({
    title: { type: String, required: true },
    publishedDate: { type: Types.Date, index: true },
    //... more irrelevant fields
});

我的扩展模型如下所示:

Post.add({
    title: { type: String, required: true },
    en: {
        title: { type: String },
        publishedDate: { type: Types.Date, index: true },
        //... more irrelevant fields
    },
    es: {
        title: { type: String },
        publishedDate: { type: Types.Date, index: true },
        //... more irrelevant fields
    },
    //... more languages following the same pattern
});

我在视图模板中使用嵌套的publishedDate属性时遇到问题。

适用于原始模型的原始视图代码:

{% if post.publishedDate %}
    <br>on {{ post._.publishedDate.format('MMMM DD, YYYY') }}
{% endif %}

我的新模型的调整后的视图代码(这是我遇到问题的地方):

{% if post[lang].publishedDate %}
    <br>on {{ post[lang]._.publishedDate.format('MMMM DD, YYYY') }}
{% endif %}

使用post[lang].xxxxxx我可以参考帖子中的所有其他项目(例如post[lang].title

我是否遗漏了导致这些嵌套下划线函数失败并出现以下错误的内容?

  

non_object_property_load请求引发的错误&#34; / en / blog
  TypeError:无法读取属性&quot; publishedDate&#39;未定义的



修改
它变得更加奇特...下面似乎有效:

{% if post[lang].publishedDate %}
    <br>on {{ post._[lang].publishedDate.format('MMMM DD, YYYY') }}
{% endif %}

如果有人能解释为什么会这样做(或者是更好的方法),我会非常感激。

1 个答案:

答案 0 :(得分:1)

@JRulle,我认为错误发生在以下一行:

<br>on {{ post[lang]._.publishedDate.format('MMMM DD, YYYY') }}

问题是下划线方法属于List对象。例如,要访问post.en.publishedDate的下划线方法,您可以使用以下语法:post._.en.publishedDate.format('MMMM DD, YYYY')

您应将以上行更改为:

<br>on {{ post._[lang].publishedDate.format('MMMM DD, YYYY') }}