Iron路由器RouteController提供未定义的错误

时间:2015-05-29 21:22:28

标签: meteor iron-router

这很好用:

Router.route('/', function () {
    this.render('home');
});

Router.route('/about', function () {
    this.render('aboutView');
});

然而,这会产生错误(RouteController' HomeController'未定义):

var HomeController, MainController;
HomeController = RouteController.extend({
    action: function() {
        this.render('home', {
     });
   }
});

MainController = RouteController.extend({
   action: function () {
     this.render('aboutView', {
     });
   }
});
Router.route('/', {name: 'home', controller: 'HomeController'});
Router.route('/about', {name: 'about', controller: 'MainController'});

我尝试了各种排列(取自IronRouter文档),但仍然存在相同的错误。 我做错了什么?

1 个答案:

答案 0 :(得分:1)

删除此行:

var HomeController, MainController;

制作这些全局变量。

或者在指定控制器时删除引号:

Router.route('/', {name: 'home', controller: HomeController});
Router.route('/about', {name: 'about', controller: MainController});

为什么会这样?

使用iron:router定义控制器时,可以使用2种不同的语法,使用字符串的变量标识符。

如果使用变量标识符,则必须使用var关键字将控制器声明为本地(文件范围)变量。

但是,如果使用字符串,控制器将被视为全局变量(窗口对象的属性),Meteor中的全局变量定义为var关键字。

通常,您将在不同的文件中定义控制器(这是控制器的重点,外部化路由逻辑),因此使用字符串语法更为常见。