meteor:在其他目录中引用其他的JavaScript类

在我的meteor应用程序。 我在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 ,我将遇到运行应用程序时的exception:

ReferenceError:BaseController未定义

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

谢谢 :)

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

从文档:

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

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

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

你的PostController依赖于BaseController,所以我会把BaseController放到lib文件夹中。

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

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

  1. 接下来加载具有更深path的文件
  2. 文件然后按照整个path的字母顺序加载

所以应该是lib/controller/post/PostController会在lib/controller/BaseController之前加载,因为它的path更深。

我认为解决办法可能是将它们都移到lib/controller这样BaseController会首先被加载,因为它将首先按字母顺序排列。