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