处理"没有数据" Flow Router和Meteor.js的场景

时间:2015-04-07 14:42:51

标签: javascript meteor router

我想知道如何处理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

3 个答案:

答案 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');
    }
  }
});