如何在流星包中扩展主控制器

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-coreapplication-controllers 本地包中并依赖于该包。