У меня есть EnhancedGrid с JsonRestStore, привязанным к API-интерфейсу Backend Rest. Вот мой код для этого:Использование Dojos EnhancedGrid с клиентскими плагинами
<script>
/**
* Creates Dojo Store.
*/
require(["dojo/store/JsonRest"], function (JsonRest) {
myStore = new JsonRest({ handleAs: 'json', target:
'https://api.twitter.com/1/statuses/user_timeline.json'+
'?trim_user=true&screen_name=twitter&count=100' });
});
var layout = [[
{ name: 'Created at', field: 'created_at', datatype: 'string',
width: '100px' },
{ name: 'Message', field: 'text', datatype: 'string',
width: 'auto', autoComplete: true },
{ name: 'Source', field: 'source', datatype: 'string',
width: '200px', filterable: false },
{ name: 'Retweets', field: 'retweet_count', datatype: 'number',
width: '100px', disabledConditions: ["startsWith", "notStartsWith"] }
]];
/**
* Creates Dojo EnhancedGrid.
*/
require(["dojox/grid/DataGrid",
"dojox/grid/EnhancedGrid",
"dojo/data/ObjectStore",
"dojox/grid/enhanced/plugins/Filter",
"dojox/grid/enhanced/plugins/NestedSorting",
"dojox/grid/enhanced/plugins/Pagination",
"dojo/domReady!"
], function (DataGrid, EnhancedGrid, ObjectStore) {
var grid = new EnhancedGrid({
id: 'grid',
store: dataStore = new ObjectStore({ objectStore: myStore }),
structure: layout,
//clientSort: "true",
rowsPerPage: 5,
rowSelector: "20px",
selectionMode: "single",
plugins: {
filter: {
ruleCount: 5,
itemsName: "Tweets"
},
nestedSorting: true,
pagination: {}
}
});
grid.placeAt('grid5');
grid.startup();
});
</script>
<div id="grid5"></div>
Как вы можете видеть, я использовал несколько плагинов для моей сетки. Плагин фильтра работает без проблем. Для этого я просто использую фильтрацию на стороне клиента. Но плагины с разбивкой по страницам и вложенная сортировка не работают.
Сортировка: при нажатии на стрелку «asc» или «desc» не изменяется порядок. Разбиение на страницы: переход на следующие 25 записей по-прежнему содержит те же 25 записей, что и предыдущая страница.
Для обоих плагинов кажется, что после щелчка он просто загружает новый json из бэкэнда и снова отображает его. Этот сетевой трафик также вызывает это. Есть ли решение, чтобы оно работало на стороне клиента?
Почему возможно использовать фильтр-плагин только для клиента, но не для плагинов для разбивки на страницы? Я думаю, что было бы неплохо сделать это на стороне клиента независимо от сервера. Может быть, я могу использовать кеш памяти для этого? –
Элемент pagination предназначен для доступа к большим данным в небольших фрагментах (= страницы), так что пользователю не нужно ждать 3 минуты для доступа к 1 миллиону строк. Но он должен работать без службы REST. Взгляните сюда: http://livedocs.dojotoolkit.org/dojox/grid/EnhancedGrid/plugins/Пагинация под разбиением на страницы и запуск примера. Нет службы REST, в которой задействованы только данные, созданные во время выполнения с помощью javascript! Помог ли мой ответ вам, вы его не проголосовали или приняли. –
Но в моем сценарии мне нужен сервис отдыха в качестве бэкэнда. Поэтому я использую магазин JsonRest. Но я не хочу, чтобы модуль разбивки на страницы отправлял запросы на мой сервер. Я хочу разбиение на страницы только на клиентских данных. –