Поддержка нескольких тем в одной сборке в ExtJs - PullRequest
0 голосов
/ 14 февраля 2019

Мне нужно сменить тему, основываясь на каком-то событии.Из документов Sencha и кухонной раковины я понял, что мы должны делать записи по всем темам в блоке «builds» app.json

"builds": {
     "classic": {
        "toolkit": "classic",
        "theme": "theme-classic"
    },
    "triton": {
        "toolkit": "classic",
        "theme": "theme-triton"
    }
},

После сборки мы можем перезагрузить приложение, как показано ниже, чтобы получить конкретную тему.

location.search = "/?profile=classic";
location.search = "/?profile=triton";

Но он работает не так, как ожидалось.Любые намеки, пожалуйста.

1 Ответ

0 голосов
/ 14 февраля 2019

Вы только на полпути.Sencha Cmd будет генерировать различные манифесты для ваших тем.Теперь вам нужно выбрать соответствующий манифест при загрузке приложения.Взгляните на раздел Dynamic Manifest из документации Microloader.

Бывают случаи, когда вы можете выбрать профиль сборки на стороне клиента.Чтобы упростить это, Microloader определяет подключаемый метод, называемый «Ext.beforeLoad».Если вы определите этот метод следующим образом, вы можете управлять именем или содержимым «Ext.manifest» до того, как Microloader обработает его, используя определение платформы.

В вашем случае это выглядело бы как-токак это:

<script type="text/javascript">
    var Ext = Ext || {};
    Ext.beforeLoad = function (tags) {
        var theme = location.href.match(/profile=([\w-]+)/);
        theme  = (theme && theme[1]) || 'classic';
        Ext.manifest = theme;
    };
</script>
...