0

Meteor と Meteor Router、特にreadyMeteor サブスクリプション ハンドルのコールバックと Router との相互作用に問題があります。サブスクリプションを ID で呼び出すと完全に機能しますが、「スラッグ」で呼び出すと機能しません。

サーバー上に 2 つのパブリケーションがあります。

Meteor.publish('singleChannel', function(id) {
    return id && Channels.find(id);
});

Meteor.publish('singleChannelSlug', function(_slug) {
    return Channels.find({slug:_slug});
});

client/main.jsパブリケーション用に 2 つのサブスクリプションがあります。

singleChannelSlugHandle = Meteor.subscribe('singleChannelSlug', Session.get('currentChannelSlug'), function () {
    console.log('singleChannelSlug is ready() ');
});

singleChannelIdHandle = Meteor.subscribe('singleChannel', Session.get('currentChannelId'),function () {
    console.log('singleChannelIdHandle ready');
});

私が持っているルーターで:

Meteor.Router.add({

'/channel/:slug': {
    as:'channelPage',
    to: function () {
        console.log('route1');
        if (singleChannelSlugHandle.ready()) {
            console.log( 'ready();', Channels.findOne({slug:Session.get('currentChannelSlug')}) );
            Session.set('currentChannelId', Channels.findOne({slug:Session.get('currentChannelSlug')})._id );
            return 'channelPage';
        } else {
            return 'spinner';
        };
    },
    and: function(slug) {
        Session.set('currentChannelSlug', slug);
    }
}

});

これは console.log() の出力です:

route1
singleChannelIdHandle ready 
singleChannelSlug is ready()  

の準備が整うとすぐにsingleChannelSlugHandle、_id を取得してセッションに書き込み、ページに移動します。しかし、何らかの理由でそれが機能することはありません。console.log('ready();') は呼び出されません。

奇妙なことに、ファイルを変更して保存すると、一度は機能します。ID だけを使用してルートを書き直しても機能しますが、抽象的な ID よりもきれいな URL が必要なため、スラッグを操作するにはそれが必要です。私はこれを4〜5時間続けていますが、理解できません

4

1 に答える 1