如何在 Meteor 模板助手中访问 FlowRouter 订阅?
How to access FlowRouter subscriptions in Meteor template helpers?
我似乎无法在我的助手中访问 FlowRouter 模板订阅。你怎么能这样做?
在我的服务器代码中:
Meteor.publish('AllUsers', function() {
return Meteor.users.find({}, {fields: {profile: 1}});
})
在我的路由器代码中:
var userRoutes = FlowRouter.group({
subscriptions: function(params, queryParams) {
this.register('AllUsers', Meteor.subscribe('AllUsers'));
},
});
在我的模板代码中:
{{#if checkFlowRouterSubs}}
{{#each getTheUsers}}
{{>userPartial}}
{{/each}}
{{/if}}
在我的助手中,我有 'guard':
checkFlowRouterSubs: function() {
if (FlowRouter.subsReady()) {
return true;
};
return false;
},
然后是 getTheUsers 助手:
...
var users = AllUsers.find(filterObject, { sort: { 'profile.firstname': 1 } }).fetch(); // the actual query definitely works
...
但是我得到一个错误:
Exception in template helper: ReferenceError: AllUsers is not defined
我应该注意到在 getTheUsers 助手中,FlowRouter.subsReady('AllUsers')
returns true
所以,首先,这个 :
var userRoutes = FlowRouter.group({
subscriptions: function(params, queryParams) {
this.register('AllUsers', Meteor.subscribe('AllUsers'));
},
});
不是服务器代码:它是客户端代码:Flow-router 是客户端路由器:违反直觉,但这是所有这些路由器的基础。
这里的提示是你是'subscribing'到这段代码中的发布,所以它在客户端。
Iron-Router 在服务器端和客户端都进行路由,因此当您从那里访问时,它会让事情变得更加混乱。
您在这里缺少的是服务器端的 publish
函数。
Meteor.publish('AllUsers', function() {
return AllUsers.find();
});
编辑:
错误
Exception in template helper: ReferenceError: AllUsers is not defined
好像是因为你没有在客户端定义集合
var AllUsers = Mongo.Collection('AllUsers'); //or whatever the actual collection
当您尝试从订阅中获取数据时,您希望调用您要为其获取数据的实际集合,而不是订阅名称。在这种情况下,我认为你的意思是 Meteor.users:
var users = Meteor.users.find(filterObject, { sort: { 'profile.firstname': 1 } });
if( users ) {
return users.fetch();
}
我似乎无法在我的助手中访问 FlowRouter 模板订阅。你怎么能这样做?
在我的服务器代码中:
Meteor.publish('AllUsers', function() {
return Meteor.users.find({}, {fields: {profile: 1}});
})
在我的路由器代码中:
var userRoutes = FlowRouter.group({
subscriptions: function(params, queryParams) {
this.register('AllUsers', Meteor.subscribe('AllUsers'));
},
});
在我的模板代码中:
{{#if checkFlowRouterSubs}}
{{#each getTheUsers}}
{{>userPartial}}
{{/each}}
{{/if}}
在我的助手中,我有 'guard':
checkFlowRouterSubs: function() {
if (FlowRouter.subsReady()) {
return true;
};
return false;
},
然后是 getTheUsers 助手:
...
var users = AllUsers.find(filterObject, { sort: { 'profile.firstname': 1 } }).fetch(); // the actual query definitely works
...
但是我得到一个错误:
Exception in template helper: ReferenceError: AllUsers is not defined
我应该注意到在 getTheUsers 助手中,FlowRouter.subsReady('AllUsers')
returns true
所以,首先,这个 :
var userRoutes = FlowRouter.group({
subscriptions: function(params, queryParams) {
this.register('AllUsers', Meteor.subscribe('AllUsers'));
},
});
不是服务器代码:它是客户端代码:Flow-router 是客户端路由器:违反直觉,但这是所有这些路由器的基础。 这里的提示是你是'subscribing'到这段代码中的发布,所以它在客户端。
Iron-Router 在服务器端和客户端都进行路由,因此当您从那里访问时,它会让事情变得更加混乱。
您在这里缺少的是服务器端的 publish
函数。
Meteor.publish('AllUsers', function() {
return AllUsers.find();
});
编辑:
错误
Exception in template helper: ReferenceError: AllUsers is not defined
好像是因为你没有在客户端定义集合
var AllUsers = Mongo.Collection('AllUsers'); //or whatever the actual collection
当您尝试从订阅中获取数据时,您希望调用您要为其获取数据的实际集合,而不是订阅名称。在这种情况下,我认为你的意思是 Meteor.users:
var users = Meteor.users.find(filterObject, { sort: { 'profile.firstname': 1 } });
if( users ) {
return users.fetch();
}