Как правильно использовать Sencha NavigationView, глубокие ссылки и историю браузера

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

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

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

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

У меня также есть контроллер, настроенный на прослушивание следующего маршрута: "entry/:id" и добавление нового представления entrydetails в стек навигации (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. Другое представление помещается в стек, это также предполагаемое поведение.Теперь проблема появляется, когда я нажимаю кнопку «Назад» БРАУЗЕРА. Это изменяет URL-адрес на index.html#entry/1 и помещает еще одно представление в мой стек. Я хотел открыть вид вместо добавления другого. Если я нажму кнопку «Назад» на панели инструментов, представление появится так, как я хотел, но это не относится к кнопке «Назад» в браузере.

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

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

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

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

6
задан jorgenfb 10 June 2012 в 08:49
поделиться