我想将一个命名空间中的所有类组合成一个文件,而不是每个都加载它们。是的我知道加载器不应该在生产环境中使用,但这些命名空间很少使用。
假设我有命名空间
App.Employee.*
我现在想在一个文件/请求中加载整个App.Employee
命名空间。对我来说这听起来应该是可能的,但我没有设法使它工作,因为加载器正在寻找一个名为App.Employee
的类。
这可能是开箱即用的,还是理论上可行的,或者根本不可能?
答案 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。