Meteor:引用不同目录中的其他javascript类

Meteor: reference other javascript classes in different directory

本文关键字:其他 javascript 引用 Meteor      更新时间:2023-09-26

在我的流星应用程序中。我在base_controller.js:中定义了一个BaseController

BaseController = RouteController.extend({
    layoutTemplate: 'mainLayout'
});

然后我在post_controller.js:中定义了PostController

PostController = BaseController.extend({
});

若我把base_controller.jspost_controller.js放在同一个目录中,并没有发现错误。但如果我放在不同的目录中,例如controller中的base_controller.jscontroller/post中的post_controller.js,我在运行应用程序时会遇到异常:

ReferenceError:BaseController未定义

我的问题是:如何将这些javascript文件划分到不同的目录中?我需要这样做,因为我的应用程序将有许多控制器,所以将所有控制器放在同一目录(没有任何子目录)将使项目难以维护。

感谢:)

您必须了解Meteor是如何加载文件的。请参阅文件加载顺序小节:http://docs.meteor.com/#/full/structuringyourapp

从文档中:

有几种装载顺序规则。它们按顺序应用于应用程序中的所有适用文件,优先级如下:

  1. HTML模板文件总是先于其他文件加载
  2. 以main开头的文件。最后加载
  3. 接下来加载任何lib/目录中的文件
  4. 下一步加载路径更深的文件
  5. 然后按整个路径的字母顺序加载文件

如果您希望首先加载文件,请将它们放在项目根目录的lib目录中或任何子目录中。

您的PostController依赖于BaseController,所以我会将BaseController放入lib文件夹中。

如果需要指定确切的文件加载顺序,可以创建具有所需功能的包。只能在包中指定确切的文件加载顺序。

如果两者都在lib/目录中,我认为答案来自文档中的4和5:

  1. 下一步加载路径更深的文件
  2. 然后按整个路径的字母顺序加载文件

因此,lib/controller/post/PostController应该在lib/controller/BaseController之前加载,因为它的路径更深。

我认为解决方案可能是将它们都移动到lib/controller中,以便首先加载BaseController,因为它将按字母顺序排列在第一位。