Javascript “处理”;无数据“;使用Flow Router和Meteor.js的场景
我想知道如何使用Meteor的流量路由器处理“无数据”场景。假设我想要一个routeJavascript “处理”;无数据“;使用Flow Router和Meteor.js的场景,javascript,meteor,router,Javascript,Meteor,Router,我想知道如何使用Meteor的流量路由器处理“无数据”场景。假设我想要一个route/article/:slug,我想在其上呈现一篇文章(由slug字段获取)以及相关注释(单独的集合)。因此,我将定义如下的路线: FlowRouter.route('/article/:slug', { subscriptions: function(params) { this.register('article', Meteor.subscribe('articleSlug', params.sl
/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" });
}
});
在模板中,我将在Sub就绪时显示文章详细信息和注释,直到那时,我将只显示“加载…”文本
但是如果URL中的:slug
参数与数据库中的任何文章都不匹配怎么办?我不想继续显示“加载…”文本,我想显示某种“未找到文章”消息。如何做到这一点
谢谢你的建议
更新:我还想指出与此问题相关的github讨论:这不是官方答案,但我会这么做。假设这是一个博客(看起来是这样的),你可以在那里抛出一个条件,类似于404 所以
然后您只需要显示缺少的文章条目。这可以通过模板完成
Template.articleDetail.helpers ({
articleFound: articles.find().count() > 0
});
在您的视图中,根据找到的文章的结果呈现正确的内容谢谢您的两个答案!在测试它们时,我想出了第三种方法:将subs放在
订阅
部分,并将检查放在操作
部分-在那里,如果没有适合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');
}
}
});
如果有一个无效的鼻涕虫怎么办,就像问题提到的那样?我明白了,我回答了一个不同的问题,不是吗?在这种情况下,我会在注册之前将查询存储为变量。我已经更新了我的答案。逻辑也可能是如果(slugCheck){//do something}我想知道什么是最快的方法:
!!(articles.find().count())
或!!(articles.findOne())
…我猜!!(articles.find().count())
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');
}
}
});