Как настроить проект Sencha ExtJS, построенный в настоящее время для рабочего стола, также работает для мобильных устройств?

мы разрабатываем, используя значение по умолчанию classic построить дескриптор до сих пор для создания динамических веб-страниц для рабочего стола.

теперь нам нужно в том же приложении для работы с мобильным телефоном, но не обязательно иметь ту же домашнюю страницу на рабочем столе или мобильной загрузке.

пользователь посещает страницу http://example.com Использование настольного браузера. Затем он видит макет представления для рабочего стола
Пользователь посещает веб-страницы http://example.com с помощью мобильный браузер. Затем он видит макет представления для мобильного телефона (может быть совершенно другой файл представления)

мы нашли эту страницу внутри документации без особой помощи:https://docs.sencha.com/extjs/6.0/core_concepts/tablet_support.html

на самом деле страница, которая в настоящее время работает полностью нормально на рабочем столе при переключении на Chrome Simulator (например, Apple iPad simulator), мы получаем следующие ошибки в консоль:

console log

нам нужно несколько шагов, которые необходимы для правильной настройки.

3 ответов


когда вы создаете совершенно новое приложение в ExtJS 6, Вы acess sencha cmd и вызываете: "sencha generate App NameApp ../ folderApp"

затем создается следующая структура:Щелкните здесь, чтобы увидеть структуру

Я не знаю о структуре, которую создал ваш код, но для работы на настольных и мобильных устройствах он должен быть в этой структуре, сгенерированной sencha cmd.

после получения этой структуры (создание нового приложения это лучшая практика для этого) вам нужно поставить "модель rigth extjjs 6.0" в вашем уме. В ExtJS позволяют MVC или architetures в MVVM. Архитектура MVC в основном управляется большим контроллером, который может управлять всеми компонентами вашего приложения. В другой стороны, архитектурных сооружений в MVVM контроллер для каждого представления - это instanciated при instanciated, и уничтожили, когда вид будет уничтожен. Эта архитектура рекомендуется в ExtJS, особенно в последних версиях.

у вас есть теперь, чтобы передать код, сделанный в вашем фактическом применении к новому приложению и архитектуре. Поместите всю структуру представления в NameApp > classic > src > view. Откройте новую папку для каждого представления. Эта папка должна содержать представление и контроллер для этого представления. Например, давайте создадим представление списка:

NameApp > classic > src > вид > список > Список.js

NameApp > classic > src > вид > список > ListController.js

и так далее...

Теперь вы можно создавать мобильные представления и контроллеры отдельно, в папке mobile > src > view, следуя той же модели, что и в classic, но вы должны использовать компоненты из mobile toolkit, конечно.

пока здесь, у вас есть отдельное мобильное и классическое приложение в том же коде. Но вы можете использовать силу ExtJS 6 путем расширения общих классов из папки приложения, чтобы оптимизировать свой код. Например, можно создать универсальный контроллер для определенного представления, который будет расширен в classic и современные папки:

NameApp > app > вид > список > ListControllerGeneric.js

Ext.define('NameApp.app.view.list.ListControllerGeneric', {
    extend: 'Ext.app.ViewController',
    //here you put code using in modern and classic both
});

NameApp > classic > src > вид > список > ListController.js

Ext.define('NameApp.app.view.list.ListController', {
    extend: 'NameApp.app.view.list.ListControllerGeneric',
    //here you put code using in classic only
});

NameApp > modern > src > вид > список > ListController.js

Ext.define('NameApp.app.view.list.ListController', {
    extend: 'NameApp.app.view.list.ListControllerGeneric',
    //here you put code using in modern only
});

одна важная вещь, чтобы избежать сбоев, чтобы создать все представления из классической папки в современную папку, даже если вы на самом деле не используете их на мобильном телефоне. Кроме того, при использовании как desktop, так и mobile вы нужно sencha App watch modern для тестирования как классических, так и современных, но вам нужно sencha app build для сборки обоих (или sencha app build для сборки конкретного).

Я надеюсь, что это объяснение может быть полезным для вас. Спасибо


как и в большинстве этих изменений фреймворка, вам лучше всего создать новую среду приложений (sencha generate app), а затем перенос (копирование) исходного кода. При создании новой среды приложения не предоставляйте конфигурацию toolkit, поэтому создается Универсальное приложение.

тогда просто не поместить весь код в один каталог. Вы должны разделить существующие файлы кода на две части: "используется для обоих наборов инструментов" и "используется только для классических". Виды обычно только классические, в то время как некоторые из моделей и магазинов могут быть универсальными. Две части идут в два разных каталога:src для универсальной части и classic/src для классической части.

только затем напишите представления для modern toolkit (поместите их в modern/src), и все должно компилироваться нормально.


Im очень новый для sencha, но я хочу отметить, что с помощью:

sencha app watch

попытке найти Мои файлы в папке приложения, даже если я использую "?modern " или использовать Chrome devs в качестве мобильного пользовательского агента.

использование:

sencha app watch modern 

решается вопрос. Эта команда будет проверять наличие user-agent или "?современное "и"?классический " тег и запрос правильных файлов.

этот ответ был первоначально в ответе @Albanir Neves, я просто сделал его более ясным здесь.