2013-04-16 2 views
2

У меня есть 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 из бэкэнда и снова отображает его. Этот сетевой трафик также вызывает это. Есть ли решение, чтобы оно работало на стороне клиента?

ответ

1

Ваша служба REST должна поддерживать все операции, необходимые для плагинов! Если ваша Служба поддерживает эти операции и все еще не работает, то что-то должно быть не так, как плагины получают доступ к данным из вашего REST API.

Запустите приложение с чем-то вроде Firebug и посмотрите, что происходит (= что запрашивается с сервера), если вы нажмете на элементы сортировки/разбиения на страницы. Если ответ сервера не отсортирован или не разбит на страницы, вам нужно будет настроить плагины, чтобы они знали, как создать действительный URL (= URL-адрес, который на самом деле делает то, что вы ожидаете от него).

Другим способом было бы создать что-то на вашем сервере, которое отображает запросы додзе на действительные запросы API REST.

+0

Почему возможно использовать фильтр-плагин только для клиента, но не для плагинов для разбивки на страницы? Я думаю, что было бы неплохо сделать это на стороне клиента независимо от сервера. Может быть, я могу использовать кеш памяти для этого? –

+0

Элемент pagination предназначен для доступа к большим данным в небольших фрагментах (= страницы), так что пользователю не нужно ждать 3 минуты для доступа к 1 миллиону строк. Но он должен работать без службы REST. Взгляните сюда: http://livedocs.dojotoolkit.org/dojox/grid/EnhancedGrid/plugins/Пагинация под разбиением на страницы и запуск примера. Нет службы REST, в которой задействованы только данные, созданные во время выполнения с помощью javascript! Помог ли мой ответ вам, вы его не проголосовали или приняли. –

+0

Но в моем сценарии мне нужен сервис отдыха в качестве бэкэнда. Поэтому я использую магазин JsonRest. Но я не хочу, чтобы модуль разбивки на страницы отправлял запросы на мой сервер. Я хочу разбиение на страницы только на клиентских данных. –

Смежные вопросы