0

テンプレートがすべてのフィールドをレンダリングしないという奇妙な状況があります

どうもありがとう

'<template name="photog">
<h2>These are {{photographer}}'s stories</h2>

{{#each photog}}

        <img src="{{photos.[0]}}" alt="great image from a story">

        <div class="caption">

            <h3>{{storyName}}</h3>

            <p>Photographer: {{photographer}}</p>

            <p>Editor: <a href="/editor/{{editor}}">{{editor}}</a></p>

        </div>
{{/each}}
</template>'
4

2 に答える 2

1

写真家の名前は、ルートのクエリから返されたデータに最上位の写真家フィールドがない{{#each}}ため、テンプレートのセクションの外では使用できません。photog

{
    "photographer" : "Dean",
    "editor" : "Dean",
    "votes" : 0,
    "photos" : [
        "/pics/wenick_20131110_171.jpg",
        "/pics/wenick_20131110_182.jpg"
    ],
    "storyName" : "D2BS West 2013",
    "_id" : "GCYR9MnYrrvxRSBQB"
}
{
    "photographer" : "Dean",
    "editor" : "Dean",
    "votes" : 1,
    "photos" : [
        "/pics/wenick_20130409_149.jpg",
        "/pics/wenick_20130409_158.jpg"
    ],
    "storyName" : "Bill's Party",
    "_id" : "tCrFAm7X6vFSbiadC"
}

次のように、別の返されたデータ値をphotogルート ( client/helpers/router.js) に追加できます。

return {
            photog: Stories.find( {photographer: this.params.photographer} ),
            photographer: this.params.photographer
        };

...そして、写真家の名前 ( 内client/views/stories/photog.html) を参照する行が次のようになっていることを確認します。

<h2>These are {{photographer}}'s stories</h2>
于 2014-01-04T10:00:31.910 に答える
0

テンプレート全体が、表示されていないオブジェクトで呼び出されます。このオブジェクトをトップと呼びましょう。私はそれが次のように見えると仮定します:

{
    "photog": [
        {
            "photographer": "name",
            "editor": "name",
            "photos": []
        },
        {
            "photographer": "name2",
            "editor": "name2",
            "photos": []
        }
    ]
}

{{#each}} は、呼び出された photog 配列をループします。each 内で変数のスコープが変更され、{{photographer}} に直接アクセスできるようになります。

しかし、それぞれ以外で、テンプレートはどの {{photographer}} を参照する必要がありますか? それはわからない。1 つの解決策は、テンプレート ヘルパーを使用してこれを配線することです。次のようなものを JavaScript に追加します。

Template.photog.photographer = function()
{
    return "the name";
}
于 2014-01-04T03:53:46.147 に答える