2012-05-07 2 views
3

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

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

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

ответ

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); 
} 

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