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

时间:2015-04-22 17:40:00

标签: meteor iron-router

在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

1 个答案:

答案 0 :(得分:0)

  

为什么我将DashboardController声明移到...之外   Meteor.startup()函数,它不起作用?

这是因为Meteor构建过程的加载顺序:每个包JS文件都是根据它们之间的依赖关系加载的,并且只有在执行实际的应用程序代码之后才会加载(这是有意义的)。

解决方案是将DashboardController移到Meteor.startup块内,以便在应用程序代码有机会定义AppController后执行它。

您也可以将AppController移到您的application-coreapplication-controllers本地包裹内,并依赖该套餐。