Ext.Direct что это такое?
- Опубликовано 21:19:58 05.05.2010
- Метки: ExtJS, javascript, Программирование
В связи с просьбами читающих пришлось провести расследование в направление 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 описанный в прошлой статье.
Понравилась статья? Помогите блогу перейдите по рекламе, вам это ничего не будет стоить.