2013-02-20 10 views

Odpowiedz

99

Proszę zwrócić uwagę, że od 1.11.0 r this.route służy tylko zamiast this.resource. Źródło: http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *

Zapraszamy do obejrzenia tej post dla szczegółowego wyjaśnienia.

To jest szorstka podsumowanie tego postu (mam zmodyfikowany nieco):

Odkąd zmiany do zasobów i trasy wielu ludzi są mylić o znaczeniu dwóch i jak oni wpływać na nazywanie. Oto różnica:

  • zasobem - rzecz (model)
  • trasa - coś zrobić z rzeczą

Więc to znaczy routera używając trasy oraz zasób może wyglądać tak:

App.Router.map(function() { 
    this.resource("posts", { path: "/" }, function() { 
    this.route("new", { path: "/new" }); 
    }); 
    this.route("another", { path: "/another" }); 
}); 

Powoduje to utworzenie/użycie następujących tras:

  • PostsRoute, PostsController, PostsView
  • PostsIndexRoute, PostsIndexController, PostsIndexView
  • PostsNewRoute, PostsNewController, PostsNewView
  • AnotherRoute, AnotherController, AnotherView

Jak widać z tego przykładu, efekt zasobem nazwy/nazwy używanych kontrolerów, tras i widoków ("nowa" trasa traktowana jest jako podrzędna dla zasobu "posty"). Cite z oryginalnego źródła (i modyfikować go, ponieważ był irytujący jak Patrick M słusznie zauważył w komentarzach):

Oznacza to podczas tworzenia zasobu stworzy nowy nazw. Ta przestrzeń nazw nosi nazwę zasobu i wszystkie ścieżki podrzędne zostaną do niej wstawione.

Aktualizacja: bardziej skomplikowany przykład z zagnieżdżonych zasobów

Rozważmy następujący bardziej skomplikowany przykład z wielu zagnieżdżonych zasobów:

App.Router.map(function() { 
    this.resource("posts", { path: "/" }, function() { 
    this.route("new", { path: "/new" }); 
    this.resource("comments", { path: "/comments" }, function() { 
     this.route("new", { path: "/new" }); 
    }); 
    }); 
    this.route("another", { path: "/another" }); 
}); 

W tym przypadku zasób comments tworzy nową przestrzeń nazw marki.Oznacza to, że wynikowe trasy w tym przypadku będą następujące. Jak widać, trasa, kontroler i widok dla zasobu komentarzy nie są poprzedzone nazwą trasy macierzystej. Oznacza to, że zagnieżdżenie zasobu w innym zasobie powoduje zresetowanie obszaru nazw (= tworzy nowy obszar nazw).

  • PostsRoute, PostsController, PostsView
  • PostsIndexRoute, PostsIndexController, PostsIndexView
  • PostsNewRoute, PostsNewController, PostsNewView
  • CommentsRoute, CommentsController, CommentsView
  • CommentsNewRoute, CommentsNewController, CommentsNewView
  • AnotherRoute, AnotherContro ller, AnotherView

To zachowanie jest również wyjaśnione w Ember Docs.

+4

To powinno być wyraźniejsze w przewodnikach Ember. Z początku na początku myliłem się z tą koncepcją. –

+0

Doskonałe podsumowanie znakomitej wiadomości. Ale ostatni cytowany fragment nie ma sensu: "Ta przestrzeń nazw będzie miała", która [...] ". Co oznacza" "? Czy to tylko symbol zastępczy dla trasy | Kontroler | Widok? –

+0

Hej Patrick, dzięki za wskazanie tego. Nie mogłem już z tego wykombinować. Dlatego dodałem bardziej złożony przykład z zagnieżdżonymi zasobami. Myślę, że ten cytat odnosi się do tego scenariusza. – mavilein

Powiązane problemy