- PVSM.RU - https://www.pvsm.ru -
В прошлой статье мы упоминали, что:
В настоящее время существует большое количество библиотек, поддерживающих протокол OData, и каждый день появляются новые. В частности, с OData работают такие JavaScript библиотеки, как Kendo UI [1], DevExtreme Web [2], Syncfusion HTML5 controls [3], Infragistics HTML5 controls [4], OpenUI5 [5], Wijmo [6], JayData [7], Breeze.js [8], datajs [9], ODataJS [10], angular-odata [11], и т.д.
Многие из этих библиотек существенно упрощают разработку сложных приложений благодаря стандарту OData. Например, достаточно грид контролу указать URL к серверу OData и все остальное он сделает сам: пэйджинг, сортировку, добавление- модификацию-удаление записей, фильтрацию данных, группировку и т.д.
Мы подготовили примеры того, как гриды работают с OData.
Основные запросы грида к серверу:
Рассмотрим детальнее основные запросы на примере
Связь грида и данных осуществляется через Kendo DataSource компонент. В примере на странице nitrosdata.com/samples_kendo_ui_grid1.html [12] в настройках грида указан тип протокола OData и URL к набору данных для чтения списка людей.
dataSource: {
type: "odata",
transport: {
read: "http://nitrosdata.com/service/testdb/person"
},
pageSize: 20,
serverPaging: true,
serverFiltering: true,
serverSorting: true
},
Более подробно о настройке DataSource компонента можно посмотреть в документации: docs.telerik.com/kendo-ui/api/javascript/data/datasource [17]
Для отображения списка людей грид добавляет различные условия запроса к URL, указанному в настройках. Для получения первой страницы грид выполняет следующий запрос:
http://nitrosdata.com/service/testdb/person?$callback=jQuery19102346130800433457_1424080067186&$inlinecount=allpages&$format=json&$top=20 [18]
Основные параметры запроса:
Для получения второй страницы добавляется параметр $skip:
http://nitrosdata.com/service/testdb/person?$callback=jQuery19105304541746154428_1425304359212&$inlinecount=allpages&$format=json&$top=20&$skip=20 [19]
Необходимо внести несколько дополнений, чтобы грид позволил модифицировать данные.
transport: {
read: "http://nitrosdata.com/service/testdb/person",
create: {url: "http://nitrosdata.com/service/testdb/person"},
update: {url: "http://nitrosdata.com/service/testdb/person"},
destroy: {url:
function (data) {
return "http://nitrosdata.com/service/testdb/person"
+ "(" + data.id + ")";
}
}
},
Добавим в описание схемы данных определение id – это необходимо чтобы грид правильно выполнял операции добавления, модификации и удаления записей
schema: {model: {id: "id"}}
editable: true,
toolbar: ["create", "save", "cancel"],
Возможно настроить грид и по-другому, вплоть до указания функций, выполняющихся при операциях модификации данных. Более подробно см. docs.telerik.com/kendo-ui/api/javascript/data/datasource [17]
При добавлении новой записи грид шлет на сервер запрос “PUT”, используя URL, указанный для операции “create”.
Тело запроса будет содержать запись в JSON формате, например:
{id: "", firstname: "John", lastname: "Walker"}
В качестве ответа грид ожидает содержимое той-же записи с возможными исправлениями, внесенными сервером.
При модификации записи грид шлет на сервер запрос “PUT” используя URL указанный для операции “update”
Все остальное работает также, как и при добавлении новой записи.
При удалении записи грид шлет на сервер запрос “DELETE”, используя URL, указанный для операции “destroy”. URL в данном случае указывает на нужную запись, которую мы хотим удалить.
Благодаря тому, что протокол OData является стандартом, различные контролы различных производителей могут автоматически формировать запросы, удовлетворяющие стандарту. В настройках Kendo UI Grid достаточно указать нужный URL, а все необходимые запросы грид сформирует автоматически.
OData сервер NitrosBase.js [16] позволяет ускорить создание прототипов приложений. Вы можете положить на форму различные контролы, указать URL, и получить работающее приложение.
P.S. Не все контролы поддерживают Odata, но их взаимодействие с сервером очень похоже, отличаясь только синтаксисом запросов. NitrosBase.js легко настраивается для использования других API. Вот пример взаимодействия известного контрола jqGrid с NitrosBase.js: nitrosdata.com/samples_jqgrid.html [20]
Автор: NitrosData
Источник [21]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/84481
Ссылки в тексте:
[1] Kendo UI: http://www.telerik.com/kendo-ui
[2] DevExtreme Web: http://js.devexpress.com/webdevelopment/
[3] Syncfusion HTML5 controls: http://www.syncfusion.com/products/javascript
[4] Infragistics HTML5 controls: http://www.infragistics.com/products/jquery
[5] OpenUI5: http://openui5.org/
[6] Wijmo: http://wijmo.com/
[7] JayData: http://jaydata.org/
[8] Breeze.js: http://www.getbreezenow.com/
[9] datajs: http://datajs.codeplex.com/
[10] ODataJS: http://olingo.apache.org/doc/javascript/
[11] angular-odata: https://github.com/rangelier/angular-odata
[12] http://nitrosdata.com/samples_kendo_ui_grid1.html: http://nitrosdata.com/samples_kendo_ui_grid1.html
[13] http://nitrosdata.com/samples_kendo_ui_grid2.html: http://nitrosdata.com/samples_kendo_ui_grid2.html
[14] http://nitrosdata.com/samples_devexpress_grid.html: http://nitrosdata.com/samples_devexpress_grid.html
[15] http://nitrosdata.com/samples_syncfusion_grid.html: http://nitrosdata.com/samples_syncfusion_grid.html
[16] NitrosBase.js: http://nitrosdata.com/
[17] docs.telerik.com/kendo-ui/api/javascript/data/datasource: http://docs.telerik.com/kendo-ui/api/javascript/data/datasource
[18] http://nitrosdata.com/service/testdb/person?$callback=jQuery19102346130800433457_1424080067186&$inlinecount=allpages&$format=json&$top=20: http://nitrosdata.com/service/testdb/person?$callback=jQuery19102346130800433457_1424080067186&$inlinecount=allpages&$format=json&$top=20
[19] http://nitrosdata.com/service/testdb/person?$callback=jQuery19105304541746154428_1425304359212&$inlinecount=allpages&$format=json&$top=20&$skip=20: http://nitrosdata.com/service/testdb/person?$callback=jQuery19105304541746154428_1425304359212&$inlinecount=allpages&$format=json&$top=20&$skip=20
[20] nitrosdata.com/samples_jqgrid.html: http://nitrosdata.com/samples_jqgrid.html
[21] Источник: http://habrahabr.ru/post/251965/
Нажмите здесь для печати.