Показаны сообщения с ярлыком Sencha Cmd. Показать все сообщения
Показаны сообщения с ярлыком Sencha Cmd. Показать все сообщения

четверг, 15 января 2015 г.

Делаем врезку

Активно занимаясь интеграцией приложений внутри компании научился многим интересным трюкам. Как, например, вставить формочку написанную ExtJs на страничку сайта?

Формочка представляет из себя полноценное одностраничное приложение. Отладка её выполняется в обычном режиме, когда файлы классов подгружаются по мере надобности. После "реализации хотелок" приложение минифицируется и отправляется на "боевой сервер". Приложение "генерится" и "билдится" при помощи Sencha Cmd 5.1.

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

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

// контейнер
<div id="extjsapp"></div>

// стили
<link rel="stylesheet" type="text/css" href="https://myhost.ru/WarrantyForm-all.css" />

// формочка
<script type="text/javascript" src="https://myhost.ru/WarrantyForm/app.js"></script>


Sencha Cmd 5, создавая уменьшенную версию приложения, записывает в файл index.html так называемый микрозагрузчик, размещая его внутри тега head. Менять тег head на данном "урле" возможности не было, поэтому попытался поместить микрозагрузчик разными способами в целевую страницу. Пробовал менять параметры в app.json. Пробовал просто вставлять весь микролоадер в текст страницы, но всё безуспешно. Сервера разные, в браузере ошибка.

Спешу обрадовать. Есть очень простое решение. Нужно создать пару неймспейсов и всё заработает. Выглядит решение так:

// контейнер
<div id="extjsapp"></div>

// стили
<link rel="stylesheet" type="text/css" href="https://myhost.ru/WarrantyForm-all.css" />

// неймспейсы
<script>
Ext = window.Ext || {}; Ext.Boot={};
</script>

// формочка
<script type="text/javascript" src="https://myhost.ru/WarrantyForm/app.js"></script>


 Решение предложено в этой ветке форума.

 Поскольку в подобной ситуации используются кросдоменные AJAX-запросы, то не могу не упомянуть о трюке с заголовком Access-Control-Allow-Origin. Дело в том, что сервер Apache может разрешить такой режим работы только одному сайту. Чтобы отобразить формочку на нескольких сайтах существует такой остроумный приём:

SetEnvIf Origin "^(http://myhost1\.ru|https://myhost2\.ru|null)$" origin_is=$0

Header  set Access-Control-Allow-Origin %{origin_is}e env=origin_is


Имя хоста, которое пришло в запросе браузера в хедере Origin, сверяется со списком внутри регулярного выражения. Если есть совпадение, оно попадает в некую созданную нами переменную окружения origin_is. Сервер пишет в ответе в Access-Control-Allow-Origin нужный хост из переменно origin_is.

Чтобы работать из браузера с JIRA мне ещё  нужно было добавить в конфиг Apache следующее:

Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Custom-Header"
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"





 

четверг, 27 марта 2014 г.

Где правильнее размещать стили


Стили CSS правильнее всего размещать в отдельных файлах. Внутри тех компонентов вашего приложения, которые нужно оформить при помощи CSS, укажите имя класса через свойство cls. Запустите в терминале из директории вашего приложения sencha app watch. Теперь при создании и изменении файлов SCSS, будет на лету меняться внешний вид вашего приложения (с задержкой в 1-2 секунды). Куда помещать файлы, чтобы они подтягивались автоматически, показано на скриншоте:




четверг, 8 августа 2013 г.

Рабочее пространство

Когда у вас в проекте не одно, а несколько одностраничных приложений на ExtJs (4.2), то в папку каждого приложения вы вынуждены повторно класть одни и те же файлы. Досадный пример - иконки. Более серьёзно заставляет задуматься над проблемой дублирование файлов SDK (библиотеки ExtJs). Они многочисленны, занимают много места на диске и тормозят IDE.

Выход есть - создавать приложения в рамках единой рабочей зоны. Трюк выполняется в два этапа:
  1. Создание рабочей зоны командой sencha generate workspace
  2. Создание приложения командой sencha generate app
Чтобы добавить второе, третье и прочие приложения, просто повторите пункт 2, изменив название приложения и имя папки внутри рабочего пространства.

Слово "трюк" было упомянуто выше, кстати, умышленно. Есть подводные камни. Чтобы обоити их и не оказаться на больничной койке на форуме поддержки, следует особое внимание  уделить тому, откуда вы будете вызывать команду sencha generate workspace. Её нужно вызывать из директории, в которой хранится SDK.

novikov@novikov-UX31A ~/NetBeansProjects/eurasclimat/www/httpdocs/sdk/ext-4.2.1.883 $ bash ~/bin/Sencha/Cmd/3.1.2.342/sencha generate workspace /home/novikov/NetBeansProjects/eurasclimat/www/httpdocs/workspace

Разберём команду по частям.

novikov@novikov-UX31A - имя пользователя и компьютера


 ~/NetBeansProjects/eurasclimat/www/httpdocs/sdk/ext-4.2.1.883 $ - директория, в которой хранится SDK


 bash ~/bin/Sencha/Cmd/3.1.2.342/sencha generate workspace - запуск команды через оболочку bash. Обратите внимание, что описан полный путь до исполняемого файла sencha. Это потому что я не стал настраивать переменную окружения PATH.

 /home/novikov/NetBeansProjects/eurasclimat/www/httpdocs/workspace - путь к создаваемому рабочему пространству.

После выполнения команды sencha generate workspace, в папке рабочего пространства, которую я совершенно произвольно назвал workspace, появится поддитектория - ext. Это то чего мы добивались. Чтобы на несколько одностраничных приложений была одна папка с библиотекой ExtJs.

Но это ещё не всё. Откроем папку рабочего пространства в терминале. Создавать новое приложение будем отсюда:

 novikov@novikov-UX31A ~/NetBeansProjects/eurasclimat/www/httpdocs/workspace/ext $ bash ~/bin/Sencha/Cmd/3.1.2.342/sencha generate app Project ../project

И наконец, для любителей кинематографа - видео:

воскресенье, 2 июня 2013 г.

Компиляция приложения, построенного на SDK ExtJs

Ознакомьтесь с предыдущими статьями:

Переходим в директорию проекта:

cd ~/NetBeansProjects/devconf2013/www/client/school/

Запускаем компиляцию и записываем сборку всех классов в файл  school.js.  Тут же минифицируем код и записываем то, что получилось в файл school-min.js.

sencha compile -classpath=sdk/src,app union -r -class school.Application and concat school.js and concat --compress school-min.js


В процессе выполнения команды подтянутся все классы, от которых зависит класс school.Application, определённый в файле:

~/www/doctornovikova/www/client/school/app/application.js

Если ОС не может найти команду sencha, нужно перезагрузить систему. Применятся настройки PATH из файла ~/.profile.

Документация по Sencha Cmd



суббота, 1 июня 2013 г.

Каркас нового приложения

Ознакомьтесь с предыдущей статьёй "Установка Sencha Cmd в Ubuntu".

Определим местонахождение папки с библиотекой ExtJs. Путь к ней будем использовать в командах Sencha Cmd (ключ -sdk).


У меня он выглядит так:

~/NetBeansProjects/devconf2013/www/client/library/ext-4.2.1.883

Однако одного этого пути недостаточно. Нужен ещё путь к папке, в которой будут лежать написанные нами классы.

Моё новое приложение называется school, поэтому создаю такую папку:

~/NetBeansProjects/devconf2013/www/client/school


Открываем терминал. Пляшем в иступлении.

Переходим в директорию, где расположен исполняемый файл утилиты Sencha Cmd. Помните, в статье про инсталляцию даной утилиты, я просил вас запомнить путь? В моём случае:

cd ~/bin/Sencha/Cmd/3.1.2.342

Предлагаем утилите Sencha Cmd создать стандартный набор папок и файлов для MVC-приложения. Я написал (в одну строку):

./sencha -sdk ~/NetBeansProjects/devconf2013/www/client/library/ext-4.2.1.883 generate app school ~/NetBeansProjects/devconf2013/www/client/school

Расшифровка:

sencha -sdk <путь к библиотеке ExtJs> generate app <имя создаваемого приложения> <путь к пустой директории>

Обратите внимание: никаких sudo. Выполняется из-под обычного пользователя.



Работа утилиты завершилась без сообщений об ошибках.


Теперь посмотрим на результат.


Всё готово! Создавайте классы представлений, контроллеров, хранилищ и моделей в предназначенных для этого разделах директории app:


О том, чтобы написаный вами код мог быстро загружаться и исполняться позаботится компилятор Sencha Cmd, о котором читайте в следующей статье Компиляция приложения, построенного на SDK ExtJs.

Установка Sencha Cmd в Ubuntu

КуримЧитаем документацию, доступную по ссылке:

документация по Sencha Cmd

Определяем, какая операционная система установлена на компьютере.


Скачиваем нужный файл со следующей страницы:

Sencha Cmd для Windows, Linux или Mac


Открываем терминал. Берём в руки бубен.

Переходим в директорию с загруженным файлом, используя команду cd.

Изменяем ограничение прав на файл так, чтобы его мог запустить на исполнение любой пользователь:

sudo chmod 777 SenchaCmd-3.1.2.342-linux-x64.run

Запускаем скаченную нами программу установки из-под обычного пользователя:

./SenchaCmd-3.1.2.342-linux-x64.run

Если запустить эту программу от имени суперпользователя, то установка пройдёт без сообщений об ошибках, но пользоваться установленным приложением будет невозможно (см. здесь).


Соглашаемся с условиями лицензии.


Доходим до выбора места установки и запоминаем выбранную директорию.


Завершаем установку Sencha Cmd.


Об использовании утилиты читате в следующей статье "Каркас нового приложения".