我想知道如何处理Meteor流路由器的“无数据”情况。假设我想要一个路由/article/:slug
,我想在其上呈现一篇文章(由slug
字段提取)以及相关的评论(单独的集合)。所以我将定义一条这样的路线:
FlowRouter.route('/article/:slug', {
subscriptions: function(params) {
this.register('article', Meteor.subscribe('articleSlug', params.slug));
this.register('comments', Meteor.subscribe('commentsByArticleSlug', params.slug));
},
action: function() {
FlowLayout.render('appLayout', { main: "articleDetail" });
}
});
在模板中,我将显示文章详情&当潜艇准备就绪时,注释,直到那时我才会显示“正在加载......”文本。
但是如果URL中的:slug
参数与数据库中的任何文章都不匹配怎么办?我不想继续显示“loading ...”文本,我想显示某种“文章未找到”的消息。怎么做?
感谢您的任何建议。
更新:我还想指出与此问题相关的github讨论:https://github.com/meteorhacks/flow-router/issues/70
答案 0 :(得分:3)
这可以通过您的模板完成。
Template.articleDetail.helpers ({
articleFound: articles.find().count() > 0
});
在视图中,渲染正确的内容取决于 articleFound 的结果。
答案 1 :(得分:2)
这不是官方回答,但这是我的所作所为。让我们说这是一个博客(看起来那样)你可以在那里抛出一个条件,类似于404。
所以
subscriptions: function(params) {
//check that this slug has an article assigned to it
var slugCheck = Meteor.subscribe('articleSlug', params.slug);
if (slugCheck != ''){
this.register('article', Meteor.subscribe('articleSlug', params.slug));
this.register('comments', Meteor.subscribe('commentsByArticleSlug', params.slug));
}
else{
this.register('article', Meteor.subscribe('articleSlug', 'missing'));
}
}
然后你只需要显示丢失的文章条目。
答案 2 :(得分:1)
感谢您的回答!在测试它们的时候,我提出了第三种方法:将潜艇留在subscriptions
部分并将支票放到action
部分 - 如果没有物品适合slug,我们可以进行重定向。
FlowRouter.route('/article/:slug', {
subscriptions: function(params) {
this.register('article', Meteor.subscribe('articleSlug', params.slug));
this.register('comments', Meteor.subscribe('commentsByArticleSlug', params.slug));
},
action: function() {
if (Articles.find().count() > 0) {
FlowLayout.render('appLayout', { main: "articleDetail" });
}
else {
FlowRouter.go('/articlenotfound');
}
}
});