0

当用户登录时,我正在尝试重定向页面。但是,我一直遇到此异常。

来自 Deps 重新计算的异常:未定义

//登录.js

  Template.loginForm.events({
  'click button#loginAdmin':
    function() {
        Session.set('user', 'test');
        alert(Session.get('user'));
    }
  });

//路由.js

Meteor.Router.add({
    '/': 'userPage',    
    '/admin': function() {
      alert('route: ' + typeof Session.get('user'));
    if (typeof (Session.get('user')) !== 'undefined') {
        return 'adminPage';
      } else {
        return 'loginPage';
      }
    },
    '/poll': 'pollPage',
    '/ustream' : 'streamPage'
  })

  // to determine which page to render
  Template.body.helpers({
    layoutName: function() {
      switch (Meteor.Router.page()) {
        case 'adminPage':
          alert('in admin');
          return 'adminLayout';
        case 'userPage':
          return 'userLayout';
        case 'pollPage':
          return 'pollLayout';
        case 'streamPage':
          return 'streamLayout';
        case 'loginPage':
          return 'loginLayout';
        default:
          return 'userLayout';
      }
    }
  });

即使我把 Meteor.Router.to('/admin'); 在我在 login.js 中设置会话后,它仍然没有路由到 adminLayout。相反,它遇到了上述错误。

有什么解决办法吗?

提前致谢!

4

1 回答 1

0

我不明白你为什么有开关。当您添加路线时,第二部分是模板。所以对于 '/': 'userPage' 当一个人访问你的根目录时,他们会看到 userPage 模板。我觉得它正在尝试渲染布局,但 layoutName 可能按照您的操作方式未定义。您应该在 {{renderPage}} 中希望路由器为您选择模板。

编辑:

好的,我认为您应该正常使用路由并添加过滤器。

Meteor.Router.add({
    '/': 'userPage',    
    '/admin': 'adminPage',
    '/poll': 'pollPage',
    '/ustream' : 'streamPage'
  })

Meteor.Router.filters({
    'mustLogin': function(page) {
        if(typeof (Session.get('user')) !== 'undefined) {
            return page;
        } else {
            return 'loginPage';
        }
});

Meteor.Router.filter('mustLogin', {only: 'adminPage'});
于 2013-06-16T01:23:23.240 回答