6

Я использую NavigationView в качестве панели root. И то, что я пытаюсь выполнить, - это нажимать виды на мою корневую панель, когда пользователь глубже погружается в мое приложение и всплывает, когда пользователь возвращается.Как правильно использовать Sencha NavigationView, глубокую привязку и историю браузера

Вот простые примеры, показывающие мою проблему: у меня есть один вид представления, показывающий некоторые сведения о записи.

Ext.define('MyApp.view.EntryDetails', { 
    extend: 'Ext.Panel', 
    xtype: 'entrydetails', 

    config: { 
     tpl: '<div>{id}</div>' 
    } 
}); 

У меня также есть контроллер, выполненный с возможностью прослушивания следующего маршрутом: «вход /: ИД» и нажмите новый entrydetails посмотреть на navigationstack (NavigationView), когда этот маршрут матчи.

Ext.define('MyApp.controller.EntryDetails', { 
    extend: 'Ext.app.Controller', 
    config: { 
     routes: { 
      'entry/:id': 'showEntry' 
     }, 
     refs: { 
      navview: 'mynavigationview' 
     }, 
    }, 

    showEntry: function(id){ 
     this.getMain().push({ 
      xtype: 'entrydetails', 
      data: {id:id} 
     }); 
    } 
}); 

Хорошо, это отлично работает. Теперь давайте сначала предположим, что я перехожу к: index.html # entry/1. Это приведет к новому представлению в стек, как я хочу. Затем я нажимаю другую ссылку index.html # entry/2. Еще одно представление помещено в стек, это также предполагаемое поведение. Теперь проблема возникает, когда я нажимаю кнопку «BROWSERS back». Это изменяет url на index.html # entry/1 и выталкивает еще один вид в мой стек. Я хотел выставить представление вместо добавления другого. Если я нажимаю кнопку панели инструментов, то вид открывается так, как я хотел, но это не относится к кнопке возврата браузеров.

Я понимаю, почему это происходит: рамка Сенча не знает, связано ли изменение URL с тем, что я нажимаю еще одну ссылку с тем же URL-адресом, что и предыдущий URL-адрес истории браузера, или если я нажимал кнопку «Назад» на мой браузер. И все, что знает мой код, это то, что он должен нажать другое представление на стек, когда он увидит изменение URL-адреса на «entry /: id».

Каков наилучший способ решить эту проблему. Как определить, что была нажата кнопка «Назад» браузера, и всплывающее представление из моей навигации.

Я подумал о том, чтобы проверить, был ли измененный URL-адрес симулятором для просмотра в нижней части моего навигационного стека, но я не уверен, что это способ сделать это.

Любая помощь/обсуждение по теме оценивается!

ответ

2

У меня была аналогичная проблема с компонентом NestedList. То, что я закончил делать, было переопределить onBackTap, отменив его, а затем перенаправить на соответствующий URL-адрес. Я предполагаю, что есть способ применить эту технику к NavigationView. Я не знаю, действительно ли это правильный способ сделать это, но это был единственный способ, с помощью которого я мог бы получить кнопки с программным обеспечением и программным обеспечением, чтобы играть хорошо вместе.

+0

Спасибо за ваш ответ. Кажется, это путь. – jorgenfb

1

Вы можете добавить эти строки в навигационном вид Definiton,

initialize: function() { 
    this.getNavigationBar().on({ 
     back: this.onBackButtonTap, 
     scope: this 
    }); 
}, 
onBackButtonTap: function() { 
    this.pop(); 
    this.fireEvent('back', this); 
    history.back(); 
} 
Смежные вопросы