1

ヘルパーで 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

FlowRouter.subsReady('AllUsers')getTheUsers ヘルパーでは、 true が返されることに注意してください。

4

2 に答える 2

1

だから、まず、これ:

var userRoutes = FlowRouter.group({
    subscriptions: function(params, queryParams) {
        this.register('AllUsers', Meteor.subscribe('AllUsers'));
    },
});

はサーバー コードではありません: クライアント コードです: Flow-router はクライアント側のルーターです: 直観に反しますが、これがこれらすべてのルーターの基礎です。ここでのヒントは、このコードでパブリケーションを「サブスクライブ」しているため、クライアント側にあるということです。

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

于 2016-03-05T19:26:41.107 に答える
0

サブスクリプションからデータを取得しようとするときは、サブスクリプション名ではなく、データを取得しようとしている実際のコレクションを呼び出す必要があります。この場合、あなたは Meteor.users を意味していると思います:

var users = Meteor.users.find(filterObject, { sort: { 'profile.firstname': 1 } });
if( users ) {
  return users.fetch();
}
于 2016-03-05T22:14:44.540 に答える