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

时间:2015-03-18 18:46:42

标签: javascript node.js meteor

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

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

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

PostController = BaseController.extend({
});

如果我将base_controller.jspost_controller.js放在同一目录中,则不会发现错误。但是如果我放入不同的目录,例如base_controller.js中的controllerpost_controller.js中的controller/post,我将在运行应用程序时遇到异常:

  

ReferenceError:未定义BaseController

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

谢谢:)

2 个答案:

答案 0 :(得分:1)

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

来自文档:

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

  1. HTML模板文件总是在其他所有内容之前加载
  2. 以main开头的文件。最后加载
  3. 下一个
  4. 加载任何lib /目录中的文件
  5. 接下来加载具有更深路径的文件
  6. 然后按整个路径的字母顺序加载文件
  7. 如果您希望首先加载文件,请将它们放在项目根目录或任何子目录中的 lib 目录中。

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

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

答案 1 :(得分:1)

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

  1. 接下来加载具有更深路径的文件
  2. 然后按整个路径的字母顺序加载文件
  3. 所以应该是lib/controller/post/PostControllerlib/controller/BaseController之前加载的情况,因为它的路径更深。

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