Ext.Direct что это такое?

В связи с просьбами читающих пришлось провести расследование в направление Ext.Direct.

Для чего же он?

Прямое назначение Ext.Direct это выполнение сценариев на стороне сервера, не зависимо от технологий и языков путем вызова методов на стороне клиента. Ext.Direct был реализован для многих популярных платформ:
  • PHP
  • Java
  • .NET
  • ColdFusion
  • Ruby
  • Perl
Ознакомится с реализацией можно здесь.

Конфигурация

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


Ext.app.REMOTING_API = {
    "url":"remote\/router.php", // Адрес для запроса
    "type":"remoting",          // Тип запроса
    "actions":{                
        "AlbumList":[{          // Имя класса на сервере
            "name":"getAll",    // Метод
            "len":0             // Количество аргументов в методе
        },{
            "name":"getById",
            "len":1
        }]
    }
};
 

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


<script src="Api.php"></script>
 

Далее нужно эту конфигурацию зарегистрировать путем вызова метода addProvider у объекта Ext.Direct


 Ext.Direct.addProvider(Ext.app.REMOTING_API);
 

Как с этим работать?

Теперь можно вызывать методы объекта AlbumList на клиентской стороне и они будут вызваны на сервере. Методы выполняются асинхронно поэтому если метод возвращает какие то данные, то нужно передать функцию обратного вызова аргументом len+1.

Пример:
// Получение всех альбомов
AlbumList.getAll(function(provider, response) {
   // Обработать результат
});
// Получит альбом по id
AlbumList.getById(id,function(provider, response) {
   // Обработать результат
});
 

При выполнение этих методов на сервер уходит запрос вида


{"action":"AlbumList","method":"getAll","data":[],"type":"rpc","tid":2}
 
Где:
  • action — Класс контроллера
  • method — Метод контроллера
  • data — Аргументы функции
  • type — для всех запросов устанавливается в «rpc»
  • tid — Идентификатор запроса нужен для того чтобы можно было различит разные запросы в одной посылке.

Ответ от сервера должен выглядеть также, только в data должен содержатся ответ.

В Ext.Direct есть замечательная весьчь, он использует буферизацию запросов. И если вы в течение определенного времени выполните 10 функций он не пошлет 10 запросов, а упакует их все в один. Это время настраивается переменной Ext.app.REMOTING_API.enableBuffer по умолчанию 100 мс.

Серверную часть не описываю, т.к. она зависит от реализации которые можно посмотреть выше по ссылке. Надеюсь дал пищу для мозгов и вы заинтересовались этой интересной технологией. В следующей статье постараюсь показать как можно соединить Ext.Direct и REST описанный в прошлой статье.

Понравилась статья? Помогите блогу перейдите по рекламе, вам это ничего не будет стоить.


Комментарии.

Написать комментарий