meteor:在其他目录中引用其他的JavaScript类
在我的meteor应用程序。 我在base_controller.js
定义了一个BaseController
:
BaseController = RouteController.extend({ layoutTemplate: 'mainLayout' });
然后我在post_controller.js
定义了PostController
:
PostController = BaseController.extend({ });
如果我把base_controller.js
和post_controller.js
放在同一个目录下,没有发现错误。 但是,如果我把不同的目录,如controller
base_controller.js
和controller/post
post_controller.js
,我将遇到运行应用程序时的exception:
ReferenceError:BaseController未定义
我的问题是:如何将这些JavaScript文件分成不同的目录? 我需要这样做,因为我的应用程序将有很多控制器,所以把所有的控制器放在同一目录(没有任何子目录)将使项目难以维护。
谢谢 :)
你必须了解Meteor如何加载你的文件。 请参阅文件加载顺序 : http : //docs.meteor.com/#/full/structuringyourapp
从文档:
有几个负载sorting规则。 它们按顺序应用于应用程序中的所有适用文件,具体优先级如下:
- HTML模板文件总是先加载
- 以main开头的文件。 最后加载
- 接下来加载任何lib /目录中的文件
- 接下来加载具有更深path的文件
- 文件然后按照整个path的字母顺序加载
如果您希望首先加载文件,请将其放在项目根目录下的lib目录中或任何子目录中。
你的PostController依赖于BaseController,所以我会把BaseController放到lib文件夹中。
如果您需要指定确切的文件加载顺序,则可以创build具有所需function的程序包。 您只能在包中指定确切的文件加载顺序。
如果两者都在lib /目录中,我认为答案是从文档 4和5:
- 接下来加载具有更深path的文件
- 文件然后按照整个path的字母顺序加载
所以应该是lib/controller/post/PostController
会在lib/controller/BaseController
之前加载,因为它的path更深。
我认为解决办法可能是将它们都移到lib/controller
这样BaseController会首先被加载,因为它将首先按字母顺序排列。