如何在流星中动态更改页面标题

时间:2013-10-11 00:51:30

标签: meteor meteorite

我遇到了Meteor和流星路由器的一些疯狂问题,特别是Meteor订阅句柄的ready回调及其与路由器的相互作用。如果我通过ID调用它是完美的,如果我通过'slug'调用它它不起作用。

我在服务器上有两个出版物:

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

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

client/main.js我有两个订阅的出版物:

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并将其写入Session并导航到该页面。但无论出于何种原因,它都无法奏效console.log('ready();')永远不会被调用。

奇怪的是,如果我更改文件并保存,它会工作一次。如果我使用ID重写路由它也可以工作,但我需要它来使用slug,因为我需要比一些抽象ID更漂亮的url。我现在已经待了4-5个小时了,无法弄清楚

1 个答案:

答案 0 :(得分:0)

首先,我不认为to的回调是被动的,所以尽管子ready()方法被动,但to回调不会重新运行。

其次,总是在你的发布中返回一个光标:

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

最后,使用铁路由器 - 它正是你所追求的(见waitOn