铁路由器 RouteController 给出了一个未定义的错误

Iron router RouteController gives a not defined error

这很好用:

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 文档),但仍然存在相同的错误。 我做错了什么?

要么删除这一行:

var HomeController, MainController;

使这些全局变量。

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

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

为什么会这样?

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

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

然而,如果你使用字符串,控制器将被视为全局变量(window 对象的 属性),并且 Meteor 中的全局变量没有定义 var关键字。

通常你会在不同的文件中定义你的控制器(这就是控制器的要点,外化路由逻辑)所以使用字符串语法更常见。