如何覆盖Ext.Loader?

时间:2014-05-17 01:33:10

标签: extjs sencha-cmd

我将Ext.Loader文件的副本放在我的myApp\overrides文件夹中。

我还编辑了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:无法找到C:\ myworkspace \ myApp \ app.js :: ClassRequire :: overrides.Loader

的任何文件

2 个答案:

答案 0 :(得分: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;
    };
})();

答案 1 :(得分:0)

Ext.Loader具有paths配置,允许您为每个命名空间指定自定义路径。

例如,如果您的AMC.overrides.whatever.ClassName路径为/overrides/whatever/ClassName.js,那么您需要这样的配置:

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

我没有使用Sencha Builder(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)。