我可以在一个文件中加载整个命名空间吗?

时间:2013-03-02 07:15:43

标签: extjs extjs4

我想将一个命名空间中的所有类组合成一个文件,而不是每个都加载它们。是的我知道加载器不应该在生产环境中使用,但这些命名空间很少使用。

假设我有命名空间

App.Employee.*

我现在想在一个文件/请求中加载整个App.Employee命名空间。对我来说这听起来应该是可能的,但我没有设法使它工作,因为加载器正在寻找一个名为App.Employee的类。

这可能是开箱即用的,还是理论上可行的,或者根本不可能?

3 个答案:

答案 0 :(得分:2)

最好的方法是构建您的应用程序,包括较少使用的部分。如果您的应用程序预先加载20或30秒并没有太大影响,但稍后延迟可能会更加明显和明显。 Sencha Cmd可以帮助你。

如果您仍然认为您的应用可以从动态加载中受益,请使用Ext.Loader.loadScript。它具有callback参数,可在加载相关脚本时启动,从而为您提供操作点。该脚本不一定是Ext类,任何JavaScript都可以 - 包括压缩形式的应用程序的一部分。

答案 1 :(得分:1)

您可以在一个文件/App/employee.js中收集所有命名空间App.Employee。*,然后在需要时将其加载文件完整路径。

Ext.require("/App/employee")

<强> UPD 即可。我也发现了一些问题。 Ext.loader不要等待employee.js。当employee.js中的类具有依赖关系时,它会抛出异常。 请尝试使用Ext.syncRequire("/App/employee")。它在我的测试中运行良好。

并且不要忘记声明文件的完整路径(来自您的webroot)。

答案 2 :(得分:-1)

您必须将所有类放在一个js文件中并加载该文件(只需将所有单个文件中的代码复制并添加到一个新文件中,并将其命名为App.employee.js)。 在一个Ajax请求中加载多个文件是不可能的,因此加载器无法帮助您。

请参阅Ext docs for details on the loader

供参考:

Ext使用CamelCase命名类和命名空间。它们的名称空间都以小写字符开头,它们的类都以大写字符开头。这使得区分两种类型变得更加容易。 遵循该惯例是明智的。有关详情,可以找到here