Pull to refresh

Несколько слов об Ext.Direct

Reading time3 min
Views7.4K

Вместо предисловия


Давно хотел опубликовать что-то полезное и вот, наконец, решил рассказать об Ext.Direct. Не видел ни одной более-менее обширной статьи на русском по данной теме, то ли это никому не нужно, то ли одно из двух, как бы то ни было начнем.

Что из себя представляет Ext.Direct?

Ext.Direct существует начиная с версии extjs 3.0. Это пакет который позволяет осуществить более тесное взаимодействие между сервером и клиентом. Вспоминая версию 2.0+ понимаю как же мне не хватало «директа».

Client Side


Возможности Ext.Direct реализованы в классах пакета Ext.data (DirectStore, DirectProxy), соответственно DirectStore в качестве ридера использует JsonReader. Так же существует пакет Ext.direct, в частности класс PollingProvider реализует переодический опрос сервера с заданным интервалом. Ну и Ext.Direct, о нем вскользь ниже и Ext.Direct.Transaction, вспомогательный класс, который напрямую не вызывается.

Начнем со Store. Что это такое объяснять не буду, кому нужно сам поймет, а кто не поймет тому и не нужно.
Самый простой вариант указать в качестве источника данных удаленный метод, указать в качестве параметра directFn

image

Просто? О да! Первые дни я был просто в экстазе. Однако этот способ не реализует так называемый CRUD (create, read, update, delete) и если вдруг вам нужно не только получать информацию, а так же ее удалять или обновлять, то можно использовать параметр api.
Примерно так:

image

Далее, удаленную функцию можно вызвать напрямую:

image

Ммм… Что еще… Вот, например обработка ошибок:

image

На серверной стороне достаточно вызвать exception

Throw new Exception(‘ололо, ошибка!’);

И она будет перехвачена обработчиком. Ну и вообще можно перехватывать что угодно. В документации рассказано как.

Server Side


На данный момент существует множество реализаций серверной стороны, полный список можно посмотреть тут.
Что касается PHP, есть реализации на чистом PHP, а так же для различных фреймворков. Я же пока что имел опыт работы с реализацией написанной Tommy Maintz. Подробнее можно посмотреть тут.

Пакет состоит из трех классов:
  • ExtDirect_API
  • ExtDirect_Router
  • ExtDirect_CacheProvider


Что нужно сделать чтобы заработало:
  1. Скачать и распаковать,
  2. А все, можно использовать.


API – предназначен для работы клиентской части, Router – для работы серверной соответственно. Ну а CacheProvider он и в Африке CacheProvider, используется для того чтобы хранить в КЭШе распарсенные классы PHP, для чего это поймете чуть позже.

api.php
image

Ну и последнее, api.php включаем таким образом

router.php, наша точка доступа к серверной части Ext.Direct
image

Теперь непосредственно к пользовательским классам. Любопытная деталь этой реализации, то что удаленные методы во-первых, инкапсулированы в классы, во-вторых, становятся доступными после манипуляций с комментариями к методу, т.е. автор решил что будет правильным парсить PHP классы и вытаскивать из файлов комментарии, (ИМХО) извращенец конечно, ну да кто тут совершенство… Кстати поэтому видимо и кэширование нужно.

File.php
image

Orders.php
image

Test.php
image

Кстати еще одно замечание, количество параметров функции должно соответствовать кол-ву передаваемых параметров, даже если некоторые из них по умолчанию =null

P.S. Можно было бы конечно более подробно описать все, но тогда это займет не один день, а время ограничено (теперь понятно почему нет более обширного обзора на русском). Кому это действительно нужно, стоит только начать и все пойдет как по маслу. Вот и все, спасибо за внимание!

Ссылки:


Документация ExtJs dev.sencha.com/deploy/dev/docs
Введение в Ext.Direct www.sencha.com/blog/2009/05/13/introducing-ext-direct
Спецификация Ext.Direct www.sencha.com/products/js/direct.php
Реализация серверной части ExtJs (список) www.sencha.com/forum/showthread.php?67992-Ext.Direct-Server-side-Stacks
Реализация на PHP by Tommy Maintz www.sencha.com/forum/showthread.php?68186-Alternative-Ext-Direct-PHP-Implementation
Tags:
Hubs:
Total votes 31: ↑29 and ↓2+27
Comments41

Articles