无法使用铁路由器访问Meteor中的参数

时间:2015-10-07 08:35:03

标签: meteor iron-router

我有'文章'的列表视图和详细视图。这些是路线

 this.route("articles", {path: "/articles", controller: "ArticlesController"});
 this.route("article", {path: "/articles/:_id", controller: "ArticleController"});

在/ articles的模板中,我有一个指向详细信息视图的链接

<a href="{{pathFor 'article' id=this._id }}"><i class="portlet-icon portlet-icon-maximize"></i></a>

在嵌入id的情况下正确呈现页面,例如:

<a href="/articles/gb6KgxbnfBeynz4rH">
   <i class="portlet-icon portlet-icon-maximize"></i>
</a>

在与路线相关的控制器中,我无法访问参数,它是空的。

this.ArticleController = RouteController.extend({
   template: "Article",

   onBeforeAction: function() {
       this.next();
   },

   action: function(){
      if (this.isReady()) {
         this.render();
      } else {
         this.render("loading");
      }
   },

   isReady: function() {
      var ready = true;
      var subs = [ Meteor.subscribe('singleArticle')];
      _.each(subs, function(sub) {
         if(!sub.ready())
            ready = false;
      });
      return ready;
   },

   data: function() {
      console.log(Iron.Location.get());
      console.log("params: " + this.params);

      return {
            article: Articles.findOne({articleId:this.params._id}, {})         
      };
   }
});

从Javascript控制台我可以看到_id与网址一起传递,但我无法访问 this.params

Javascript Console

1 个答案:

答案 0 :(得分:1)

问题是您正在使用console.log

console.log("params: " + this.params);

params对象实际上是一个长度为零的数组。您可以在此处阅读有关它的讨论:https://github.com/iron-meteor/iron-router/issues/1213

所以你可以在各个参数上使用console.log,它会起作用:

console.log("params._id: " + this.params._id);

或者您可以使用:

console.dir("params: " + this.params);