Meteor Iron-Router - 传递对象与传递函数到Router.route()之间的区别

时间:2014-11-14 19:32:36

标签: meteor iron-router

我正在阅读https://github.com/EventedMind/iron-router/blob/devel/Guide.md处的文档,我无法清楚地了解何时将函数传递给route()方法以及何时传递对象。

使用数据渲染模板的示例 - 将函数作为第二个参数传递:

Router.route('/post/:_id', function () {
  this.render('Post', {
    data: function () {
      return Posts.findOne({_id: this.params._id});
    }
  });
});

等待订阅完成的示例 - 将对象作为第二个参数传递:

Router.route('/post/:_id', {
  // this template will be rendered until the subscriptions are ready
  loadingTemplate: 'loading',

  waitOn: function () {
    // return one handle, a function, or an array
    return Meteor.subscribe('post', this.params._id);
  },

  action: function () {
    this.render('myTemplate');
  }
});

如您所见,文档中的一些示例使用一种形式,一些使用另一种形式。一般来说,当我找到一些解决我的想法的文档时,它使用的形式与我在文档中其他地方的示例中采用的形式不同。

两种形式之间有什么关系?我该如何混搭?

1 个答案:

答案 0 :(得分:1)

我目前正在了解这一点。我发现你可以根据自己的需要交替使用两种方法。

格式如您所述,您可以将函数作为路径定义的第二个参数传递。

我发现最大的区别是使用函数可以覆盖Router.config中的某些设置。例如,您必须注意如何定义渲染,而不是覆盖布局模板。

我觉得这是一个偏好问题,因为我已经看到了许多不同的如何设置路线的例子(例如。Iron router and hooks)。

基本上我使用Router.map()来尝试处理大多数标准设置,然后寻找定义钩子来控制通过路由器的流量。然后我希望根据需要设置自定义控制器,并随着项目的扩展。

总而言之,我觉得自己已经不再使用函数来定义路径了,因为它需要更多的显式性,尽管我想看到它有一个目的,想要更精细地处理路径,条件和参数。 / p>