2013-01-05 12 views

Odpowiedz

35

RouterV2 nie jest łatwo dostępny za pośrednictwem stałej globalnej, przez co trudniej jest robić rzeczy w niewłaściwy sposób. Najważniejszą rzeczą, o której należy pamiętać, jest to, że nie powinno się uzyskiwać dostępu do routera (lub czegokolwiek innego) za pośrednictwem zmiennej globalnej. Jest to generalnie zła praktyka, prowadząca do bardzo trudnego do sprawdzenia kodu. Niestety ze starym routerem dość łatwo było zrobić coś takiego, jak App.router.transitionTo('whatever') - możesz znaleźć przykłady tego w każdym miejscu, ale nie jest to dobry pomysł.

Zamiast pracować z odniesieniem globalnym, ember podaje lokalne odwołania do routera tylko tam, gdzie jest to potrzebne.

  • Od modelu: niedostępny. Modele nie powinny rozmawiać z routerem.
  • Ze sterownika: router = this.get('target')
  • Z widoku: Widok nie powinien mieć dostępu do routera, ale zdarzenia wysyłane do kontrolera będą dymić. Na przykład: this.get('controller').send('search', term)
  • Z szablonu: użyj pomocników {{action}} lub {{#linkTo}}, aby wysyłać zdarzenia (za pośrednictwem kontrolera) lub przejść do innego adresu URL.

Więcej szczegółów można znaleźć wskazówek dotyczących tego zobowiązać: https://github.com/emberjs/ember.js/commit/5becdc4467573f80a5c5dbb51d97c6b9239714a8

** Aktualizacja **

ułożyła piorun rozmawiać z bardziej szczegółowo na nowym routerze do stycznia EmberNYC Meetup - slajdy tutaj: How I learned to stop worrying and love the router

+0

I od trasy jest ona dostępna jako 'get ('ten, routera)' – Pavel

1

wierzę, że to działa w każdym miejscu:

App.Router.router.transitionTo('home')

Używam go w widoku. Zdaję sobie sprawę, że tu jest trochę kodu. Jednak działa.

+0

zdecydowanie zapachu kodu. Zamiast tego wyślij akcję i obsłuż ją w drodze do przejścia. –

1

Można spróbować to:

App.__container__.lookup('router:main').transitionTo('name_of_your_route'); 
+1

Można to zrobić podczas debugowania, ale należy tego unikać w kodzie produkcyjnym. –

Powiązane problemy