Korzystanie z backbone.js, czy można zrobić router przejść do strony, skąd pochodzi? Chciałbym użyć tego dla sprawy, w której zmieniam swój adres URL, gdy pojawi się wyskakujący popup, a ja chcę zmienić go z powrotem, gdy ukrywam popup. Nie chcę po prostu wrócić, bo chcę zachować stronę tła dokładnie taką samą pozycję, jak go opuściłem, zanim pokazałem popup

8
user802232 7 grudzień 2011, 17:28

4 odpowiedzi

Najlepsza odpowiedź

Możesz rozwiązać ten problem, rozszerzając Backbone.Router i przechowywanie wszystkich tras podczas nawigacji.

class MyRouter extends Backbone.Router
  constructor: (options) ->
    @on "all", @storeRoute
    @history = []
    super options

  storeRoute: ->
    @history.push Backbone.history.fragment

  previous: ->
    if @history.length > 1
      @navigate @history[@history.length-2], true 

Następnie, kiedy musisz odrzucić modal, po prostu wywołaj metodę MyRouter.previous(), że przekieruje cię z powrotem do ostatniego "Hash".

14
mateusmaso 18 luty 2017, 00:48

Myślę, że odpowiedź Mateusmaso jest głównie racja, ale wymaga pewnych poprawek, aby zagwarantować, że zawsze otrzymasz właściwy adres URL, którego szukasz.

Najpierw musisz zastąpić metodę trasy, aby uzyskać pożar metodę beforuteute:

route: (route, name, callback) =>
   Backbone.Router.prototype.route.call(this, route, name, =>
     @trigger('beforeRoute')
     callback.apply(this, arguments)
   )

Następnie wiążysz zdarzenie i zainicjujesz zmienną instancję historii:

initialize: (options) ->       
   @history = []
   @on "beforeRoute", @storeRoute

Następnie Utwórz metody pomocnika do przechowywania i pobierania fragmentu:

storeRoute: =>
   @history.push Backbone.history.fragment

previousFragment: =>
   @history[@history.length-2]

Wreszcie potrzebujesz jednej ostatniej metody pomocnika, która może być użyta do zmiany adresu URL bez ponownego ładowania i przechowywania powstałego fragmentu. Musisz użyć tego podczas zamykania wyskakującego wyskakującego lub nie będziesz miał oczekiwanego fragmentu w swojej historii, jeśli użytkownik ponowne pojawia się wyskakujący bez nawigacji w dowolnym miejscu. Dzieje się tak dlatego, że wywołanie nawigacji bez "wyzwalacza: True" nie spowoduje wyzwalania obsługiwania zdarzeń do przechowywania fragmentu.

changeAndStoreFragment: (fragment) =>
   @navigate(fragment)
   @storeRoute()
1
DrewB 25 wrzesień 2012, 19:36

Ta odpowiedź może nie zająć się pytaniem, ale jest oczywiście ten sam problem. Nie mogłem nawigować po cichu na poprzednią trasę ani niestandardowej trasie z powodu spływu. W celu uzyskania funkcji trasy, użyj {trigger:false} lub nie używać spustu w ogóle od false jest domyślnym zachowaniem i upewnij się, że trasa zaczyna się od #something zamiast "# / coś" (zwróć uwagę na slash) lub zmień regex wewnątrz backbone.js, część routera.

0
man 3 styczeń 2015, 13:13

Możesz wywołać trasę w Oncloseevent swojej popup lub nakładki z:

router.navigate('/lasturl/');

Spowoduje to ustawienie adresu URL. Jeśli zostaniesz prawdziwy jako drugi param, wykonasz również działanie tras. W przeciwnym razie strona zostanie pozostawiona bez zmian.

http://documentCloud.github.com/backbone/#router-navate.

-2
ProTom 7 grudzień 2011, 14:55