Meteor 铁路由器,发布和订阅
所以我有一个简单的视图,显示了一个项目和该项目中的故事。在iron router中,我称之为projectShow路线: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
@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)
确保已设置加载模板
。将一直显示,直到订阅完成