Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 铁路由器,发布和订阅_Meteor_Publish Subscribe_Iron Router - Fatal编程技术网

Meteor 铁路由器,发布和订阅

Meteor 铁路由器,发布和订阅,meteor,publish-subscribe,iron-router,Meteor,Publish Subscribe,Iron Router,所以我有一个简单的视图,显示了一个项目和该项目中的故事。在iron router中,我称之为projectShow路线: @route 'projectShow', { path: '/projects/:_id', template: 'projectsShow' } 我的模板是 <template name="projectsShow"> <div class="row"> I'm a project

所以我有一个简单的视图,显示了一个项目和该项目中的故事。在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>
我不清楚的是,在路由器/客户端中,在何处以及如何正确订阅,以及如何设置会话变量,以便在添加新故事时可以引用当前项目

我试过:

# 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')})

然而,这并不意味着要将其放入模板中。我做错了什么

在您的示例中,在waitOn闭包中返回
Session.set('projectd',@params.\u id)

您应该返回Meteor。订阅。只需交换线路即可


有比上述问题更多的问题,所以我决定用js重新创建您的项目,它可以正常工作。 请查看存储库:

我注意到的问题:

// 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...

在您的示例中,在waitOn闭包中返回
Session.set('projectd',@params.\u id)

您应该返回Meteor。订阅。只需交换线路即可


有比上述问题更多的问题,所以我决定用js重新创建您的项目,它可以正常工作。 请查看存储库:

我注意到的问题:

// 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...

您可以这样做,而不是
waitOn

before: ->
    this.subscribe("projectAndStories",@params.id).wait();
    Session.set('projectId', @params._id)

确保已设置
加载模板
。订阅完成后才会显示。

您可以这样做,而不是
waitOn

before: ->
    this.subscribe("projectAndStories",@params.id).wait();
    Session.set('projectId', @params._id)
确保已设置
加载模板
。将一直显示,直到订阅完成