Как я могу переопределить Ext.Loader?

Я поместил копию файла 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


person Greg Lafrance    schedule 17.05.2014    source источник
comment
Не связывайтесь с Ext.Loader, если вы не чувствуете себя крайне мазохистским. Земля Большой Боли лежит на этой дороге.   -  person Alex Tokarev    schedule 17.05.2014
comment
Согласна с комментарием Алексея. Во-первых, почему вы хотите переопределить его? Чего вы хотите достичь?   -  person Saki    schedule 17.05.2014
comment
Мы локализуем наше приложение с помощью github.com/TigrouMeow/extjs-locale-loader. Он отлично работает, когда приложение не минимизировано, поэтому мне нужно переопределить Loader. То, что я делаю, отлично работает и безопасно. Итак, как я могу заставить это работать? Спасибо!   -  person Greg Lafrance    schedule 17.05.2014


Ответы (2)


Я также столкнулся с этой проблемой, потому что использую 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;
    };
})();
person SAnDAnGE    schedule 30.10.2014

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).

person Nux    schedule 09.02.2018