【发布时间】:2015-08-22 01:16:04
【问题描述】:
在 Meteor 中遇到一个奇怪的错误:
路由调度从未渲染。您是否忘记在 onBeforeAction 中调用 this.next()?
并且没有任何内容正在呈现。我怎样才能解决这个问题?非常感谢任何帮助。
这是我的 router.js
Router.configure({
layoutTemplate: 'layout',
});
Router.route('/', function() {
this.render('home');
});
Router.route('/user/:_username', {
name: 'user_profile',
data: function() { return Meteor.user();}
});
Router.route('/create', function() {
this.render('create_event');
});
Router.route('/events/:name', {
name: 'event',
data: function() { return Events.findOne({name: this.params.name});}
});
Router.route('/useremail', function() {
this.render('userEmail');
}, {
name: 'userEmail'
});
Router._filters = {
hasCompletedProfile: function() {
if(!this.ready()) return;
var user = Meteor.user();
if (user && ! userProfileComplete(user)){
this.render('userEmail');
} else {
this.next();
}
},
};
filters = Router._filters;
Router.onBeforeAction(filters.hasCompletedProfile);
【问题讨论】:
-
this.next() 必须始终调用,只需将其放在 if 块外最后一行的 _filters 方法中
-
具体在哪里?尝试了 _filters 方法中的一些不同点,但目前还没有工作...谢谢
-
在hasCompletedProfile函数中最后一条语句必须是this.next(),没有这个else块——即使你渲染了一些东西你仍然需要调用this.next()
标签: javascript meteor routing iron-router