6

Używam NavigationView jako panel główny. A rzeczą, którą staram się osiągnąć, jest przeniesienie widoków na mój panel główny, gdy użytkownik nawiguje głębiej w mojej aplikacji i wyświetla je, gdy użytkownik wróci.Jak korzystać z Sencha NavigationView, głębokiego linkowania i historii przeglądarki poprawnie

Oto proste przykłady pokazujące mój problem: Mam jeden typ widoku pokazujący niektóre szczegóły wpisu.

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

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

Mam też kontroler skonfigurowany do słuchania następującej trasie: „wejścia /: id” i wcisnąć nowy entrydetails zobaczyć na navigationstack (NavigationView) przy tej trasie meczów.

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

OK, to działa poprawnie. Teraz najpierw przyjmijmy, że nawiguję do: index.html # entry/1. Spowoduje to przeniesienie nowego widoku na stos, tak jak chcę. Następnie klikam inny link index.html # entry/2. Kolejny widok jest wypychany na stos, to także zamierzone zachowanie. Problem pojawia się po kliknięciu przycisku Wstecz PRZEGLĄDARKI. Spowoduje to zmianę adresu URL na index.html # entry/1 i przeniesie kolejny widok na mój stos. Chciałem wyświetlić widok zamiast dodawać kolejne. Jeśli naciśniesz paski narzędziowe, widok jest wysuwany tak jak chciałem, ale tak nie jest w przypadku przycisku wstecz przeglądarki.

Rozumiem, dlaczego tak się dzieje: struktura dotykowa Sencha nie wie, czy zmiana adresu URL wynikała z tego, że kliknąłem inny link z tym samym URL-em, co poprzedni adres URL historii przeglądarki, lub gdy naciskałem przycisk Wstecz moja przeglądarka. I cały mój kod wie, że to powinno przesłać inny widok na stos, gdy zobaczy zmianę adresu URL na "entry /: id".

Jaki jest najlepszy sposób rozwiązania tego problemu. Jak wykryć, że przycisk Wstecz przeglądarki został naciśnięty, a widok z mojego widoku nawigacyjnego zostanie wyświetlony.

Zastanawiam się nad sprawdzeniem, czy zmieniony adres URL był podobny do widoku znajdującego się dalej na stosie nawigacji, ale nie jestem pewien, czy to jest sposób na zrobienie tego.

Każda pomoc/dyskusja na ten temat jest doceniana!

Odpowiedz

2

Miałem podobny problem ze składnikiem NestedList. To co zrobiłem to nadpisanie onBackTap, anulowanie go, a następnie przekierowanie do odpowiedniego adresu URL. Zgaduję, że jest jakiś sposób zastosowania tej techniki również do NavigationView. Nie wiem, czy to właściwie jest właściwa droga, ale był to jedyny sposób, w jaki mogłem uzyskać ładnie ze sobą przyciski sprzętowe i oprogramowanie.

+0

Dziękuję za odpowiedź. Wydaje się, że jest to właściwa droga. – jorgenfb

1

Możesz dodać te linie do nawigacji widok zaliczane,

initialize: function() { 
    this.getNavigationBar().on({ 
     back: this.onBackButtonTap, 
     scope: this 
    }); 
}, 
onBackButtonTap: function() { 
    this.pop(); 
    this.fireEvent('back', this); 
    history.back(); 
} 
Powiązane problemy