Próbuję zrozumieć różnicę między a Route
i a Resource
. Sposób, w jaki rozumiem, Resource
pomaga ustawić ścieżki podrzędne Route
obiektu do innego Route
obiektu. Ale jest niejasne, kiedy myślę o domyślnym mapowaniu nazw również dla ścieżek.
Próbuję zrozumieć różnicę między a Route
i a Resource
. Sposób, w jaki rozumiem, Resource
pomaga ustawić ścieżki podrzędne Route
obiektu do innego Route
obiektu. Ale jest niejasne, kiedy myślę o domyślnym mapowaniu nazw również dla ścieżek.
Odpowiedzi:
Należy pamiętać, że od wersji 1.11.0
this.route
jest używany tylko zamiastthis.resource
. Źródło: http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *
Spójrz na ten post, aby uzyskać szczegółowe wyjaśnienie.
To jest przybliżone podsumowanie tego postu (trochę zmodyfikowałem):
Od czasu zmiany zasobu i trasy wielu ludzi jest zdezorientowanych co do znaczenia tych dwóch elementów i ich wpływu na nazewnictwo. Oto różnica:
- zasób - rzecz (model)
- trasa - coś związanego z tą rzeczą
Oznacza to, że router korzystający z trasy i zasobu może wyglądać następująco:
App.Router.map(function() {
this.resource("posts", { path: "/" }, function() {
this.route("new", { path: "/new" });
});
this.route("another", { path: "/another" });
});
Spowodowałoby to utworzenie / użycie następujących tras:
Jak widać na tym przykładzie, zasób wpływa na nazewnictwo używanych / tworzonych kontrolerów, tras i widoków (trasa „nowa” jest traktowana jako podrzędna wobec zasobu „posty”). Cytuj z oryginalnego źródła (zmodyfikowałem je, ponieważ było irytujące, jak słusznie wskazał Patrick M w komentarzach):
Oznacza to, że za każdym razem, gdy tworzysz zasób, utworzy on zupełnie nową przestrzeń nazw. Ta przestrzeń nazw nosi nazwę zasobu i wszystkie trasy podrzędne zostaną do niej wstawione.
Aktualizacja: bardziej złożony przykład z zagnieżdżonymi zasobami
Rozważmy następujący bardziej złożony przykład z wieloma zagnieżdżonymi zasobami:
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 zupełnie nową przestrzeń nazw. Oznacza to, że otrzymane trasy w tym przypadku będą następujące. Jak widać, trasa, kontroler i widok zasobu komentarzy nie są poprzedzone nazwą trasy nadrzędnej. Oznacza to, że zagnieżdżenie zasobu w innym zasobie resetuje przestrzeń nazw (= tworzy nową przestrzeń nazw).
To zachowanie jest również wyjaśnione w dokumentach Ember .
That namespace will have an " which [...]
. Co to "
oznacza? Czy to tylko symbol zastępczy dla Route | Kontroler | Widok?
App.Router.map(function() { this.route("posts", { path: "/" }, function() { this.route("new"); this.route("comments"}, function() { this.route("new"); }); }); this.route("another", { path: "/another" }); });