2016-07-14 13 views
1

Ext JSの相対パスを使用してクラスを要求することは可能ですか?相対名でExt 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. 
}); 

は、この依存関係を表現する方法はあります

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

そしてMyClass.js次のようになります。私はこのようなディレクトリ構造を持っていると仮定全体のクラス名を参照することなく?例えば、MyClass.jsMyClassDependency.jsが入っているフォルダを、MyClass.jsにあるすべての依存関係を更新することなく、移動させたいと思います。

答えて

0

これまで標準的な方法はありません。
理論的には、メソッドを上書きして、現在の "名前空間"をrequires配列のクラスに先行させることができます。そう

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

、煎茶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.*', 
    ] 
});