在meteor包中扩展主控制器的正确方法是什么?
这是我的情况,主控制器位于app.js
文件中,位于
both/controllers/app.js
内容
AppController = RouteController.extend({
layoutTemplate: 'appLayout'
});
在 my-package 文件夹中,我创建了一个router.js
文件
packages/my-package/lib/router.js
在文件内容之下,出现了一个问题:为什么如果我在Meteor.startup()函数之外移动DashboardController
声明,它不起作用?
DashboardController = AppController.extend({}); // here doesn't work
Meteor.startup(function () {
Router.route('/dashboard', {
controller: DashboardController,
name: 'dashboard'
});
输出
ReferenceError: AppController is not defined
答案 0 :(得分:0)
为什么我将DashboardController声明移到...之外 Meteor.startup()函数,它不起作用?
这是因为Meteor构建过程的加载顺序:每个包JS文件都是根据它们之间的依赖关系加载的,并且只有在执行实际的应用程序代码之后才会加载(这是有意义的)。
解决方案是将DashboardController
移到Meteor.startup
块内,以便在应用程序代码有机会定义AppController
后执行它。
您也可以将AppController
移到您的application-core
或application-controllers
本地包裹内,并依赖该套餐。