单个 Post 订阅在我的流星代码中不起作用
Single Post subscription not working in my meteor code
我想根据传递的 ID 仅显示单个元素。我同样使用流星的订阅和发布方法,也使用 FlowRouter 进行路由。当我尝试使用 findOne 获取数据并传递 Id 时,它没有 return 任何数据,但是当我使用 find({}) 时,它获取所有数据并显示它,不知道为什么 findOne 是不工作..
注意:我正在尝试根据 MongoDB 提供的对象 ID(_id) 获取记录。
posts = Mongo.collection("allPosts");
<Template name="stdSingleView">
{{#if Template.subscriptionsReady}}
{{#with studenthistory}}
{{id}} - {{name}}
{{/with}}
{{else}}
Loading....
{{/if}}
</Template>
Template.stdSingleView.onCreated(function(){
var self = this;
self.autorun(function(){
var Id = FlowRouter.getParam('id');
self.subscribe('singlePost', Id);
});
});
Template.stdSingleView.helpers({
studenthistory: function(){
var id= FlowRouter.getParam('id');
return posts.findOne({_id: id});
}
});
if (Meteor.isServer) {
Meteor.publish("allposts", function() {
return posts.find({});
});
Meteor.publish('singlePost', function(id) {
check(id, String);
return posts.find({_id: id});
});
}
pages.route( '/:id', {
name: 'singleView',
action: function( params ) {
BlazeLayout.render('stdSingleView');
}
});
find
会return一个游标,里面只包含一个文件。您需要遍历它才能获取数据,或者您将助手更改为 findOne
Template.stdSingleView.helpers({
studenthistory: function(){
var id= FlowRouter.getParam('id');
return posts.findOne({_id: id});
}
});
当你用_id做findOne时,请把它包装到新的Mongo.ObjectID中然后传递。
试试这个代码:
Meteor.publish('singleStudent', function(id) {
check(id, String);
return attendanceRegCol.find({"_id": new Mongo.ObjectID(id)});
});
Template.studentSingleView.helpers({
studenthistory: function(){
var id= FlowRouter.getParam('id');
return attendanceRegCol.findOne({"_id": new Mongo.ObjectID(id)});
}
});
我想根据传递的 ID 仅显示单个元素。我同样使用流星的订阅和发布方法,也使用 FlowRouter 进行路由。当我尝试使用 findOne 获取数据并传递 Id 时,它没有 return 任何数据,但是当我使用 find({}) 时,它获取所有数据并显示它,不知道为什么 findOne 是不工作..
注意:我正在尝试根据 MongoDB 提供的对象 ID(_id) 获取记录。
posts = Mongo.collection("allPosts");
<Template name="stdSingleView">
{{#if Template.subscriptionsReady}}
{{#with studenthistory}}
{{id}} - {{name}}
{{/with}}
{{else}}
Loading....
{{/if}}
</Template>
Template.stdSingleView.onCreated(function(){
var self = this;
self.autorun(function(){
var Id = FlowRouter.getParam('id');
self.subscribe('singlePost', Id);
});
});
Template.stdSingleView.helpers({
studenthistory: function(){
var id= FlowRouter.getParam('id');
return posts.findOne({_id: id});
}
});
if (Meteor.isServer) {
Meteor.publish("allposts", function() {
return posts.find({});
});
Meteor.publish('singlePost', function(id) {
check(id, String);
return posts.find({_id: id});
});
}
pages.route( '/:id', {
name: 'singleView',
action: function( params ) {
BlazeLayout.render('stdSingleView');
}
});
find
会return一个游标,里面只包含一个文件。您需要遍历它才能获取数据,或者您将助手更改为 findOne
Template.stdSingleView.helpers({
studenthistory: function(){
var id= FlowRouter.getParam('id');
return posts.findOne({_id: id});
}
});
当你用_id做findOne时,请把它包装到新的Mongo.ObjectID中然后传递。
试试这个代码:
Meteor.publish('singleStudent', function(id) {
check(id, String);
return attendanceRegCol.find({"_id": new Mongo.ObjectID(id)});
});
Template.studentSingleView.helpers({
studenthistory: function(){
var id= FlowRouter.getParam('id');
return attendanceRegCol.findOne({"_id": new Mongo.ObjectID(id)});
}
});