在将data
返回到模板之前,我正在努力等待订阅加载特定路由。我可以从服务器上的发布中看到找到文档,但在客户端上没有文档。
如果我在发布上执行find()。count(),它会显示找到的1个文档,这是正确的,但是当我对订阅进行计数时,它会显示0个文档。
我尝试了许多不同的方法,比如使用subscriptions:function()而不是waitOn:function(),但没有任何方法。
Collections.js lib:
SinglePackage = new Mongo.Collection("SinglePackage");
SinglePackage.allow({
insert: function(){
return true;
},
update: function(){
return true;
},
remove: function(){
return true;
}
});
Publications.js服务器:
Meteor.publish("SinglePackage", function(pack_id) {
return Packages.find({shortId: pack_id});
});
铁路由器:
Router.route('/package/:id', {
name: 'package.show',
template: 'Package_page',
layoutTemplate: 'Landing_layout',
waitOn: function() {
return Meteor.subscribe('SinglePackage', this.params.id);
},
data: function() {
return SinglePackage.find();
},
action: function () {
if (this.ready()) {
this.render();
} else {
this.render('Loading');
}
}
});
我做错了什么,或者这只是一件很复杂的事情?有人会认为waitOn会让剩下的函数等到订阅准备就绪。
任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
在订阅准备好之前,data
函数似乎正在运行。即使data
函数在订阅准备就绪后运行,它也不会成为反应数据源,使pub / sub在这里毫无意义。 Here's a great article on reactive data sources
请参阅Iron Router Docs订阅中的示例,您可以执行以下操作:
Router.route('/package/:id', {
subscriptions: function() {
// returning a subscription handle or an array of subscription handles
// adds them to the wait list.
return Meteor.subscribe('SinglePackage', this.params.id);
},
action: function () {
if (this.ready()) {
this.render();
} else {
this.render('Loading');
}
}
});
然后在你的template.js:
Template.Package_page.helpers({
singlePackage() {
// This is now a reactive data source and will automatically update whenever SinglePackage changes in Mongo.
return Package.find().fetch();
}
});
在您的template.html中,您现在可以使用singlePackage
:
<template name="Package_page">
{#with singlePackage} <!-- Use #each if you're singlePackage is an array -->
ID: {_id}
{/with}
</template>