2014-05-17 14 views
1

我把Ext.Loader文件的副本,我myApp\overrides文件夾中。我如何可以覆蓋Ext.Loader?

我還編輯sencha.cfg所以它是這樣的:

app.classpath=${app.dir}/app,${app.dir}/app.js,${app.dir}/overrides 

我也把這個在我的app.js要求:

requires: [ 
    'AMC.overrides.Loader' 
] 

想這太:

requires: [ 
    'overrides.Loader' 
] 

但是,當我建我仍然得到這個錯誤:

com.sencha.exceptions.ExBuild: Failed to find any files for C:\myworkspace\myApp\app.js::ClassRequire::overrides.Loader

+0

不要惹Ext.Loader除非你感到極度自虐。大痛苦的土地就在這條路上。 –

+0

同意Alex的評論。首先,你爲什麼要重寫它?你想實現什麼? – Saki

+0

我們使用https://github.com/TigrouMeow/extjs-locale-loader本地化我們的應用程序。當應用程序沒有縮小時,它很好用,所以我需要覆蓋Loader。我所做的工作很好,很安全。那麼我怎麼才能使這個工作?謝謝! –

回答

1

我也有這個問題,因爲我用grunt-filerev

這是我迄今爲止最好的解決辦法:

/** 
* Override for Ext.Loader.getPath using Interceptor 
* @return {string} The path after the build process 
*/ 
(function() { 
    var method = Ext.Loader.getPath; 
    Ext.Loader.getPath = function() { 
     var path = method.apply(this, arguments); 
     return my.bootstrap.assets[path] || path; 
    }; 
})(); 
0

Ext.Loader具有paths配置,允許您指定自定義每個命名空間的路徑。

例如,如果你AMC.overrides.whatever.ClassName路徑是/overrides/whatever/ClassName.js,那麼你就需要這樣的配置:

Ext.Loader.setConfig({ 
    paths: { 
     'AMC.overrides': scriptsRoot + '/overrides', 
    } 
}); 

我不使用煎茶生成器(sench-CMD),但高於在瀏覽器工作正常,它也應該爲建造者工作。

顯然scriptsRoot會在你的HTML,JSP或任何你正在使用服務的應用程序被定義爲一個全球性的。事情是這樣的,也許:

<script type="text/javascript"> 
     scriptsRoot = '${applicationHome}/js'; 
    </script> 

    <script type="text/javascript" src="${applicationHome}/js/loaderConfig.js"></script> 
    <script type="text/javascript" src="${applicationHome}/js/app.js"></script> 

當使用requires(或uses)配置你應該總是使用全名(例如AMC.overrides.whatever.ClassName)。