sencha touch 2 - как манипулировать поддержкой истории

Я хочу использовать систему маршрутизации для поддержки кнопки «Назад». я показываю список элементов на основе хранилища записей. когда я обрабатываю событие itemtap function(list, index, target, record), я получаю ссылку на выбранную запись, которую я передаю на новый экран, который я создаю и показываю.

в этом сценарии, как я могу указать диспетчеру истории, что я перешел на новый экран, и включить кнопку «Назад». я вижу application.redirectTo, но я потеряю ссылку на запись, которую хочу использовать. (redirectTo поместит новое действие в стек истории, который включает в себя первичный идентификатор записи, но это кажется избыточным, поскольку мне тогда нужно будет повторно найти запись на основе идентификатора, когда я обработаю перенаправление.)

Есть ли прямой способ сообщить объекту истории о переходе к новому действию, а также включить поддержку кнопки «Назад»?


person Paul    schedule 07.05.2012    source источник


Ответы (1)


Я не нашел, как это сделать проще. Вот как я это делаю в своем приложении (со вложенным списком). Я создал контроллер с маршрутизацией следующим образом:

Ext.define('MyApp.controller.ListItems', {
    extend: 'Ext.app.Controller',

    config: {
            refs: {
                    nestedList: '.nestedlist'
            },
            control: {
                    nestedList: {
                            itemtap: 'itemSelected'
                    }
            },
            routes: {
                    'item/:id': 'showListItem'
            }
    },

    list: null,
    index: null,
    target: null,
    record: null,
    showListItem: function( id ){
            var nestedList = this.getNestedList(),
                    store = nestedList.getStore(),
                    node = store.getById(id);
            if ( node.isLeaf() ){
                    nestedList.goToLeaf(node);
                    nestedList.fireEvent('leafitemtap', nestedList, this.list, this.index, this.target, this.record);
            } else {
                    nestedList.goToNode(node);
            }
    },
    itemSelected: function( nl, list, index, target, record ){
            this.list = list;
            this.index = index;
            this.target = target;
            this.record = record;
            var path = 'item/'+record.data.id;
            this.redirectTo(path);
    }
});

Я также переопределил метод вложенного списка onItemTap для всех изменений списка, которые теперь выполняются с помощью контроллера и правильной маршрутизации.

onItemTap: function(list, index, target, record, e){
    this.fireEvent('itemtap', this, list, index, target, record, e);
}

Надеюсь, это будет полезно. Пишите сюда, если найдёте способ лучше, пожалуйста.

person sepulchered    schedule 21.05.2013