В своем последнем посте я продемонстрировал сенсорный список Sencha с помощью Spring MVC . Пост был хорош, за исключением одной вещи — мы показываем все фильмы в одном списке одновременно. Для этого примера это хорошо, потому что у нас есть только 20 записей фильмов, и Sencha touch сохраняет размер страницы по умолчанию — 25, но подумайте, что произойдет, если вы захотите показать больше записей в списке (то есть в списке всех стран мира).
Чтобы решить эту проблему, Sencha Touch имеет плагин Paging ( Ext.plugin.ListPaging
), который мы можем использовать для одновременной загрузки записей исправлений. Он добавляет кнопку «Загрузить еще» внизу списка. Когда пользователь нажимает эту кнопку, следующая страница данных будет загружена в хранилище и добавлена в список.
Продолжите с нашего предыдущего поста, нам просто нужно изменить Store, List в javascript файле и MovieController.java
, MovieDatabase.java
file.
Сначала добавьте конфигурацию pageSize в свой магазин фильмов.
Ext.define('TechZoo.store.Movie', { extend : 'Ext.data.Store', storeId : 'movieStore', config : { model : 'TechZoo.model.Movie', autoLoad: true, pageSize: 10, sorters : 'genre', grouper : { groupFn : function(record) { return record.get('genre'); }, sortProperty : 'genre' }, proxy : { type: 'ajax', url : 'movies/load.do', reader : { type : 'json', totalProperty: 'totalCount', rootProperty: 'moviesList' } } } }); Ext.create('TechZoo.store.Movie');
Теперь отредактируйте MovieList
и добавьте Ext.plugin.ListPaging
класс в конфигурации плагина.
Ext.define('TechZoo.view.MovieList', { extend : 'Ext.dataview.List', alias : 'widget.movielist', config : { store : 'Movie', plugins : [{ xclass : 'Ext.plugin.ListPaging', autoPaging: true }], grouped : true, indexBar: true, itemTpl : '{title}', listeners : { itemtap : function(me, index, target, record){ Ext.Msg.alert('Movie Detail', 'Director: ' + record.get('director') + '<br/>Year of Release : ' + record.get('yearOfRelease')); } }, onItemDisclosure : true } });
Что касается серверной части Java, сначала нам нужно изменить MovieDatabase
метод класса для поддержки подкачки List.
package org.techzoo.touch.vo; import static org.techzoo.touch.vo.Movie.MovieGenre.Action; import static org.techzoo.touch.vo.Movie.MovieGenre.Comedy; import static org.techzoo.touch.vo.Movie.MovieGenre.Family; import static org.techzoo.touch.vo.Movie.MovieGenre.Horror; import static org.techzoo.touch.vo.Movie.MovieGenre.War; import java.util.ArrayList; import java.util.List; public class MoviesDatabase { private List<Movie> movies = null; private static MoviesDatabase _instance = null; private MoviesDatabase() { if(null == movies){ initializeMovies(); } } public static MoviesDatabase getInstance() { if(null == _instance){ return new MoviesDatabase(); } return _instance; } public List<Movie> getMovies() { return movies; } public List<Movie> getMoviesByPage(int start, int limit) { List<Movie> moviesList = movies.subList(start, start+limit); return moviesList; } private void initializeMovies() { movies = new ArrayList<Movie>(); /** Action **/ movies.add(new Movie(1001, "Ek Tha Tiger", "Kabir Khan", 2012, Action)); movies.add(new Movie(1002, "Khiladi", "Abbas Mastan", 1992, Action)); movies.add(new Movie(1003, "Kick", "Sajid Nadiadwala", 2014, Action)); movies.add(new Movie(1004, "Rowdy Rathore", "Prabhudheva", 2012, Action)); /** Horror **/ movies.add(new Movie(1005, "Bhoot", "Ram Gopal Varma", 2003, Horror)); movies.add(new Movie(1006, "Raat", "Ram Gopal Varma", 1992, Horror)); movies.add(new Movie(1007, "Aatma", "Deepak Ramsay", 2013, Horror)); movies.add(new Movie(1008, "Mahal", "Kamal Amrohi", 1949, Horror)); /** Comedy **/ movies.add(new Movie(1009, "Gol Maal", "Hrishikesh Mukherjee", 1979, Comedy)); movies.add(new Movie(1010, "Jaane bhi do Yaaro", "Kundan Shah", 1983, Comedy)); movies.add(new Movie(1011, "Andaz apna apna", "Rajkumar Santoshi", 1994, Comedy)); movies.add(new Movie(1012, "3 Idiots", "Rajkumar Hirani", 2009, Comedy)); /** Family **/ movies.add(new Movie(1013, "Chakde India", "Shimit Amin", 2007, Family)); movies.add(new Movie(1014, "Khichdi", "Aatish Kapadia", 2010, Family)); movies.add(new Movie(1015, "Vivah", "Sooraj Barjatya", 2006, Family)); movies.add(new Movie(1016, "Beta", "Indra Kumar", 1992, Family)); /** War **/ movies.add(new Movie(1017, "Border", "JP Datta", 1997, War)); movies.add(new Movie(1018, "LOC Kargil", "JP Datta", 2003, War)); movies.add(new Movie(1019, "Lakshya", "Farhan Akhtar", 2004, War)); movies.add(new Movie(1020, "Tango Cahrlie", "Mani Shankar", 2005, War)); } }
И, наконец, создайте метод контроллера, который берет параметр ‘start’ и ‘limit’ из запроса и возвращает список фильмов.
package org.techzoo.touch.controller; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.validation.ObjectError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.techzoo.touch.vo.Movie; import org.techzoo.touch.vo.MoviesDatabase; @Controller @RequestMapping("movies") public class MovieController { @RequestMapping(value = "/index") public String index() { return "index"; } @RequestMapping (value = "/load.do", method = RequestMethod.GET) public @ResponseBody Map<String, Object> loadMovies(HttpServletRequest request) throws Exception { MoviesDatabase mdb = MoviesDatabase.getInstance(); int start = ServletRequestUtils.getIntParameter(request, "start"); int limit = ServletRequestUtils.getIntParameter(request, "limit"); List<Movie> movies = mdb.getMoviesByPage(start, limit); Map<String, Object> resp = new HashMap<String, Object>(); resp.put("moviesList", movies); resp.put("totalCount", mdb.getMovies().size()); return resp; } }
Выход:
Когда изначально список загружается ..
и когда после него загрузятся все записи…
Надеюсь, вам понравится этот пост. Удачного кодирования …