如何在Meteor模板帮助程序中访问FlowRouter订阅?

如何在Meteor模板帮助程序中访问FlowRouter订阅?,meteor,meteor-blaze,flow-router,Meteor,Meteor Blaze,Flow Router,似乎我无法在助手中访问FlowRouter模板订阅。你怎么能做到这一点 在我的服务器代码中: Meteor.publish('AllUsers', function() { return Meteor.users.find({}, {fields: {profile: 1}}); }) 在我的路由器代码中: var userRoutes = FlowRouter.group({ subscriptions: function(params, queryParams) {

似乎我无法在助手中访问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}}
在我的助手中,我有“守卫”:

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.subReady('AllUsers')
返回true

因此,首先:

var userRoutes = FlowRouter.group({
    subscriptions: function(params, queryParams) {
        this.register('AllUsers', Meteor.subscribe('AllUsers'));
    },
});
不是服务器代码:它是客户端代码:Flow路由器是客户端路由器:违反直觉,但这是所有这些路由器的基础。 这里的提示是,您正在“订阅”此代码中的发布,因此它位于客户端

Iron Router同时在服务器端和客户端进行路由,因此当您从服务器端到客户端时,它会使事情变得更加混乱

这里缺少的是服务器端的
publish
功能

Meteor.publish('AllUsers', function() {
    return AllUsers.find();
});
编辑:

错误

模板帮助程序中的异常:引用错误:未定义AllUsers
似乎是因为您没有在客户端定义集合


var alluser=Mongo.Collection('alluser')//或者无论实际集合是什么

当您尝试从订阅中获取数据时,您都希望调用要获取数据的实际集合,而不是订阅名称。在这种情况下,我想你指的是Meteor.users:

var users = Meteor.users.find(filterObject, { sort: { 'profile.firstname': 1 } });
if( users ) {
  return users.fetch();
}

谢谢你的回复。为这个错误道歉-我的服务器代码中确实有这个错误。我已经修改了这个问题,似乎你的收藏没有在客户端定义。谢谢你,这可能就是原因。我想您仍然需要在客户端为已发布的收藏提供本地存储。谢谢。在助手中执行此操作时,有时会出现未定义的错误,即使是在使用防护时