12

2 つの異なるルートとテンプレート間でデータを渡すにはどうすればよいですか?

フロント エンド (クライアント フォルダー) に、投稿 ID をパラメーターの 1 つとして渡すだけの Router.go() を呼び出す JavaScript ファイルがあります。

以下は、3つの主な犯人です(私は信じています)。読みやすくするために、ほとんどのコードを削除しました。問題なくPostDetailページに変更できます。Router からPostDetailページのPostIdを取得することもできます。私の問題は、取得されたデータベース エントリ ( POLL ) がテンプレートにレンダリングされないことです。したがって、データベース エントリが返されている場合でも、{{Question}}は常に空白になります。

さらに情報を投稿する必要がある場合はお知らせください。

フロントエンド.js

Template.PostTiles.events({
  // When a choice is selected
  'click .pin' : function(event, template) {        
    Router.go('Post', {_PostId: this.PostId});    
  }
});

post-detail.html

<template name="PostDetail">
    <h3>{{Question}}</p>
</template>

Shared.js

Router.map( function() {

    this.route('Home', {
        path: '/',
        template: 'PostTiles',
        data: {
            // Here we can return DB data instead of attaching 
            // a helper method to the Template object
            QuestionsList: function() {
                return POLL.find().fetch();
            }           
        }
    });

    this.route('Post', {
        template: 'PostDetail',
        path: '/Post/:_PostId',
        data: function() {          
            return POLL.findOne(this.params._PostId); 
        },
        renderTemplates: {
            'disqus': {to: 'comments'}
        }
    });

});

- - - アップデート - - -

{{#each SomeList}}構文を使用してデータベース エントリのリストを表示するのではなく、単純に 1 つのデータベース エントリのみを表示できるように問題を絞り込んだと思います。

4

2 に答える 2

2

findOneあなたは答えを見つけた/これを解決したように見えますが、念のため、あなたの声明にあると思います:

data: function() {          
        return POLL.findOne(this.params._PostId); 
    },

読む必要があります:

data: function() {          
        return POLL.findOne({_id:this.params._PostId}); 
    },

(POLL に投稿が _id でリストされていると仮定します。

それが役立つことを願っています。

于 2013-09-20T18:54:16.200 に答える
0

セッションで情報を渡していただけますか? そのためのドキュメントはhttp://docs.meteor.com/#sessionにあります。それが私がやろうとしていることです。

于 2013-09-11T16:53:00.073 に答える