Для того чтобы получить желаемый список, нужно изменить еще две вещи. В примере при перечислении фильмов мы сортируем их по возрастанию значения свойства id. Именно оно используется в качестве keyPath для хранилища объектов movies, но в то же время очевидно, что чаще всего пользователей интересует сортировка совсем по другому значению.
С учетом этого мы в функции createdb() создали еще один индекс, SearchYear, связав его со свойством date. Этот индекс позволит упорядочить список фильмов по году производства.
Листинг 11.10. Упорядочивание по убыванию года
Function show(){
Databox. innerHTML=»;
Var transaction=db. transaction([‘movies’]);
Var objectstore=transaction. objectStore(‘movies’);
Var index=objectstore. index(‘SearchYear’);
Var newcursor=index. openCursor(null, IDBCursor. PREV);
Newcursor. addEventListener(‘success’, showlist, false);
}
Функция из листинга 11.10 заменяет собой функцию show() из кода в листинге 11.9. Эта новая функция создает транзакцию, затем связывает индекс SearchYear с используемым в транзакции хранилищем объектов и, наконец, с помощью openCursor() извлекает из хранилища объекты, у которых есть соответствующее данному индексу свойство (в нашем случае date).
Два атрибута позволяют настраивать процесс выбора и упорядочивания информации с использованием курсора. Первый атрибут определяет диапазон, в котором объекты выбираются, а значением второго может быть одна из перечисленных далее констант:
— NEXT. Возвращаемые объекты упорядочиваются по возрастанию (это значение по умолчанию);
— NEXT_NO_DUPLICATE. Возвращаемые объекты упорядочиваются по возрастанию, а дублирующиеся объекты игнорируются (в случае обнаружения повторяющихся ключевых слов возвращается только первый объект);
— PREV. Возвращаемые объекты упорядочиваются по убыванию;
— PREV_NO_DUPLICATE. Возвращаемые объекты упорядочиваются по убыванию, а дублирующиеся объекты игнорируются (в случае обнаружения повторяющихся ключевых слов возвращается только первый объект).
Благодаря указанным в листинге 11.10 атрибутам метода openCursor() функция show() возвращает список объектов хранилища, упорядоченный по убыванию даты. В качестве значения атрибута range пока что используется null. Как определить диапазон выбора значений, мы узнаем в конце этой главы.
Откройте код из листинга 11.9 и замените функцию show() новой функцией, код которой представлен в листинге 11.10.
Эта новая функция выводит на экран список фильмов, упорядочивая их по убыванию года (самые новые находятся наверху списка). Результат должен выглядеть так:
Id: tt1285016 name: The Social Network date: 2010
Id: tt0111161 name: The Shawshank Redemption date: 1994
Id: tt0086567 name: WarGames date: 1983
Id: tt0068646 name: The Godfather date: 1972
Добавить комментарий