Meteor JS:基于传递参数的条件订阅,在Iron Router中?

时间:2014-01-14 07:39:10

标签: javascript meteor iron-router

这实际上是两个问题:

  1. 是否可以在Iron Router的waitOn选项中有条件地订阅集合?

  2. 是否可以在Router.go()中传入对象作为参数?

  3. 在我的应用中创建新帖子时,我正在尝试减少渲染视图的延迟。我尝试传入一个isNew属性作为Router.go()的参数,但没有运气:

    // Router call after creating a new post
    Router.go('postPage', {
      _id: id, 
      isNew: true, 
      post: newPostObject
    });
    
    // router.js
    Router.map(function() {
      this.route('postsList', {
        path: '/'
      });
      this.route('postPage', {
        path: '/:_id',
        waitOn: function() {
    
          //This returns only _id for some reason.
          console.log(this.params);
    
          if (this.params.isNew != true) {
            return [
              Meteor.subscribe('singlePost', this.params._id),
              Meteor.subscribe('images', this.params._id),
            ]
          }
        },
        data: function() {
          if (this.params.isNew == true) {
            return this.params.post
          else {
            return Posts.findOne(this.params._id);
          }
        }
      });
    });
    

2 个答案:

答案 0 :(得分:1)

经过一番挖掘,看起来像Iron Router支持选项哈希作为Router.go()方法中的第三个参数:

Router.go( 'postPage', {_id: id}, {isNew: true} );

要在路线中访问它,您可以使用this.options。要在上面的示例中获取isNew的值,请使用this.options.isNew

答案 1 :(得分:0)

您只能按this.params访问动态路径细分。所以要让this.params.isNew工作,你需要这样做。

this.route('postPage', {
  path: '/:_id/:isNew',
  waitOn: function() {}
  ...
});