我正在使用iron:router v1.0.7但是this.render()是“未定义的”。我看不出我做错了什么

时间:2015-02-15 22:22:33

标签: javascript meteor iron-router

当访问者尝试访问“提交”页面时,我显示访问被拒绝的模板。这很好用。这是代码:

Router.route('/', {name: 'etoeventsList'});
Router.route('/submit', {name: 'etoeventSubmit'});

var requireLogin = function () {
  if (!Meteor.user()) {
    this.render('accessDenied');
  } else {
    this.next();
  }
};

Router.onBeforeAction(requireLogin, {only: 'etoeventSubmit'});

我想利用" requireLogin"在不同的上下文(匿名用户访问' /')所以我想我会添加一个参数,允许我传入要呈现的模板。像这样:

var requireLogin = function (template) { // now with argument 'template'
  if (!Meteor.user()) {
    this.render(template); // using 'template'
  } else {
    this.next();
  }
};

Router.onBeforeAction(requireLogin('accessDenied'), {only: 'etoeventSubmit'}); // passing 'accessDenied'
Router.onBeforeAction(requireLogin('index'), {only: 'etoeventsList'}); // passing 'index'

我收到的错误是Uncaught TypeError: undefined is not a function,我想要显示的模板不显示。

1 个答案:

答案 0 :(得分:1)

你不能这样做。您的方式,将引用窗口。您必须使用匿名函数作为 onBeforeAction 的参数。

Router.configure({
    layoutTemplate: 'layout',
    loadingTemplate: 'loading',
    notFoundTemplate: 'notFound',
    waitOn: function() {

    }
});

if(Meteor.isClient) {
  Router.onBeforeAction(function() {
    // is user logged in
    if (! Meteor.user()) {
      if (Meteor.loggingIn()) {
        this.render('loading');
      } else {
        this.render('accessDenied');
      }
    } else {
      this.next();
    }
  });
}