进入深层链接时,铁路由器路由的执行会发生什么变化?

时间:2014-04-27 21:20:42

标签: meteor iron-router

我有一个小型的流星应用程序与铁路由器。这是我的routes.js,可供客户端和服务器使用:

Router.configure({
  layoutTemplate: 'defaultLayout',
  loadingTemplate: 'loading'
});

// Map individual routes    
Router.map(function() {
  this.route('comicCreate', {
    path: '/comic/create'
  });

  this.route('comicDetails', {
    onBeforeAction: function () {
      window.scrollTo(0, 0);
    },
    path: '/comic/:_id',
    layoutTemplate: 'youtubeLayout',
    data: function() { return Comics.findOne(this.params._id); }
  });

  this.route('frontPage', {
    path: '/',
    layoutTemplate: 'frontPageLayout'
  });

  this.route('notFound', {
    path: '*',
    where: 'server',
    action: function() {
      this.response.statusCode = 404;
      this.response.end('Not Found!');
    }
  });    
});

我需要将我的漫画集合文档中的一些字段提供给包装Youtube的IFrame API的包,我通过渲染的函数执行此操作:

Template.comicDetails.rendered = function() {
  var yt = new YTBackground();

  if (this.data)
  {
    yt.startPlayer(document.getElementById('wrap'), {
      videoIds: this.data.youtubeIds,
      muteButtonClass: 'volume-mute',
      volumeDownButtonClass: 'volume-down',
      volumeUpButtonClass: 'volume-up'
    });
  }    
};

当我开始转到localhost:3000 /然后点击设置为“{{pathFor' comicDetails'_id}}”的链接时,这非常有用。但是,如果我直接转到localhost:3000 / comic / somevalidid,它不会,尽管这两条路线最终都指向同一个网址。

原因似乎是当我直接进入深层链接时,在执行渲染函数期间未定义“this.data”。模板本身显示正常(数据正确地替换了模板中的空格键{{field}}标签),但是当渲染的回调触发时,数据的“this”上下文中没有任何内容。

我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

尝试在Meteor.startup中声明路线......不确定这是否是问题,但值得一试