要求Ext JS类具有相对名称

时间:2016-07-14 15:02:34

标签: javascript extjs

是否可以在Ext JS中使用相对路径的类?假设我有一个这样的目录结构:

appRoot
`- some
   `- really
      `- long
         `- path
            |- MyClass.js
            `- MyClassDependency.js

MyClass.js看起来像这样:

Ext.define('RootName.some.really.long.path.MyClass', {
    requires: ['RootName.some.really.long.path.MyClassDependency'],
    // Snipped.
});

MyClassDependency.js就像这样:

Ext.define('RootName.some.really.long.path.MyClassDependency', {
    // Snipped.
});

有没有办法在不引用整个类名的情况下表达这种依赖?例如,我想移动MyClass.jsMyClassDependency.js所在的文件夹,而不必更新MyClass.js所拥有的每个依赖项。

1 个答案:

答案 0 :(得分:0)

到目前为止,没有标准的方法可以这样做 从理论上讲,可以覆盖方法Ext.ClassManager.define以预先添加当前的#34;名称空间"到requires数组中的类。

Ext.override(Ext.ClassManager, {
  define : function(className, data) {
    //prepend data.requires with className
    this.callSuper(arguments);
  }
});

这样做,Sencha Cmd将无法构建应用的缩小版本,因为它无法再解决需求,只要您不在构建中包含所有文件。
我不会做这个尝试,因为你用ExtJs更新破坏某些东西的风险是巨大的。

另一种方法是使用通配符。

Ext.define('TestApp.view.Main', {
  requires: [
    'TestApp.view.*'
  ]
});

我想到的最后一件事是使用别名。

Ext.define('TestApp.view.MainDep', {
  alias: ['module1.mainDep']
});

Ext.define('TestApp.view.Main', {
  requires: [
    'module1.mainDep',
    'module2.*',
  ]
});