1

そのため、プロジェクトとそのプロジェクトのストーリーを表示する単純なビューがあります。Iron Router では、これを projectShow ルートと呼んでいます。

@route 'projectShow', {   
  path: '/projects/:_id', 
  template: 'projectsShow'
}

私のテンプレートは

<template name="projectsShow">
  <div class="row">         
    I'm a project            
    {{name}}
    <a href="#" id="add-story">New Story</a>
    {{#each stories}}
      Title: {{title}}
    {{/each}}
  </div>
</template>

したがって、私をつまずかせているのは、サーバーからデータを正しく選択してクライアントに提供することです。私が試したのは、次のように公開することです:

if Meteor.isServer
  Meteor.publish "projectAndStories", (id) ->
    [Projects.findOne({_id: id}), Stories.find({projectId: id})]

私にとって不明なのは、ルーター/クライアント側でこれを正しくサブスクライブする場所と方法、およびセッション変数を設定して、新しいストーリーを追加するときに現在のプロジェクトを参照できるようにすることです

私は試した:

# in route
waitOn: ->
  Meteor.subscribe('projectAndStories', @params._id)
  Session.set('projectId', @params._id)

# template js file
  Template.projectShow.project = Projects.findOne({_id: Session.get('projectId')})
  Template.projectShow.stories = Stories.find({projectId: Session.get('projectId')})

ただし、これはテンプレートに組み込まれているようには見えません。私は何を間違っていますか?

4

2 に答える 2

1

あなたの例ではSession.set('projectId', @params._id)、waitOnクロージャーに戻ります。

Meteor.subscribeを返す必要があります。ラインを入れ替えるだけ。


上記よりも多くの問題があったため、js でプロジェクトを再作成することにしました。リポジトリをご覧ください: https://github.com/parhelium/stackoverflow-iron-pub-sub

私が気づいた問題:

// Template.projectShow:   
{{name}} -> {{project.name}}

// waitOn closure should return:
Meteor.subscribe('projectAndStories', @params._id)

プロジェクトの作成中に直面した問題:

// assign p to projectId, NOT p._id 
var p = Projects.insert({
    name: "Project #"+i,
});
Stories.insert({
    title: "Story #"+j,
    projectId:p
});

// check if data in mongo is correct, projectId was null in my case...
于 2013-11-07T06:28:30.700 に答える