1

モデルで複数の言語をサポートするために、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 %}

I を使用post[lang].xxxxxxすると、投稿内の他のすべての項目を参照できます (たとえば、post[lang].title.

これらのネストされたアンダースコア関数が次のエラーで失敗する原因となっている何かがありませんか?

リクエストに対して non_object_property_load エラーがスローされました" /en/blog
TypeError: 未定義のプロパティ 'publishedDate' を読み取れません



編集:
それはより独特になります...以下はうまくいくようです:

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

これが機能する理由 (またはこれを達成するためのより良い方法) の説明を誰かが提供できる場合は、本当に感謝しています。

4

1 に答える 1

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') }} 
于 2015-03-30T16:32:39.220 に答える