迁移到FlowRouter,需要类似于模板数据上下文的东西

时间:2016-02-02 16:14:32

标签: node.js meteor iron-router flow-router

所以我在讨论Iron Router vs FlowRouter时已经阅读了很多内容。

我使用Iron Router启动了我的项目,但后来改变了主意,我正在迁移到FlowRouter。

在我开始迁移应用的评论部分之前,一切都很顺利。你看,这个部分在应用程序上重复使用了几次,它作为新闻,帖子,照片,视频等的评论部分。

使用IR数据上下文的示例:

Router.route('/news/:slug', {
   name: 'newsItem',
   waitOn: function() { Meteor.subscribe('news.single', this.params.slug) },
   data: function() {
      return News.findOne({slug: this.params.slug});
   }
});

<template name="newsItem">
  <p>{{title}}</p>
  <p>{{body}}</p>
  {{> commentSection}}
</template>

Comment集合架构有一个“类型”(知道这个评论所属的“东西”类型,新闻,照片等)。该类型是在commentSection模板的“form .submit”事件中设置的。例如:

'submit form': function(e, template) {
  e.preventDefault();
  var $body = $(e.target).find('[name=body]');
  console.log(template.data.type);
  var comment = {
    type: template.data.type,
    parentId: template.data._id,
    parentSlug: template.data.slug,
    body: $body.val()
  };
  Meteor.call('insertComment', comment, function(error, commentId) {
    if (error){
      alert(error.reason);
    } else {
      $body.val('');
    }
  });
}

这很有效,因为模板数据上下文包含了News项,而news项又包含了一个type属性。

如果没有在官方指南中推荐的模板上设置数据,我怎样才能使用Flow Router实现类似的功能呢?

1 个答案:

答案 0 :(得分:2)

您可能希望使用模板订阅和{{#with}}帮助程序。

Template.newsItem.onCreated( function() {
    Template.instance().subscribe('news.single', FlowRouter.current().params.slug);
});

Template.newsItem.helpers({
    item() {
        let item = News.findOne();
        if( item ) {
            return item;
        }
    }
});

<template name="newsItem">
    {{#with item}}
        <!-- Your existing stuff -->
    {{/with}}
</template>