Yeni Yönlendirici API'deki bir yol ve kaynak arasındaki fark nedir?


114

A Routeve a arasındaki farkı anlamaya çalışıyorum Resource. Anlama Resourceşeklim, bir Routenesnenin alt yollarını başka bir RouteNesneye ayarlamaya yardımcı olur . Ancak, yollar için de varsayılan ad eşlemesinin olduğunu düşündüğümde net değil.

Yanıtlar:


101

Lütfen 1.11.0'dan itibaren this.routeyalnızca yerine kullanıldığını unutmayın this.resource. Kaynak: http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *

Bu göz at mesaja ayrıntılı bir açıklama için.

Bu, bu gönderinin kaba bir özetidir (biraz değiştirdim):

Kaynak ve rota değişikliğinden bu yana pek çok insanın bu ikisinin anlamı ve isimlendirmeyi nasıl etkilediği konusunda kafası karışık. İşte fark:

  • kaynak - bir şey (bir model)
  • rota - şeyle yapılacak bir şey

Bu, bir yol ve kaynak kullanan bir yönlendiricinin şöyle görünebileceği anlamına gelir:

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

Bu, aşağıdaki rotaların oluşturulmasına / kullanılmasına neden olur:

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

Bu örnekte gördüğümüz gibi, kaynak, kullanılan / yaratılan Denetleyicilerin, Yolların ve Görünümlerin isimlendirilmesini etkiler ("yeni" yol, "postalar" kaynağının alt öğesi olarak değerlendirilir). Orijinal kaynaktan alıntı yapın (değiştirdim, çünkü Patrick M'nin yorumlarda doğru bir şekilde işaret ettiği gibi rahatsız ediciydi):

Bu, bir kaynak oluşturduğunuzda yepyeni bir ad alanı oluşturacağı anlamına gelir. Bu ad alanı, kaynağın adını alır ve tüm alt yollar ona eklenecektir.

Güncelleme: iç içe geçmiş kaynaklarla daha karmaşık örnek

Birden çok iç içe geçmiş kaynak içeren aşağıdaki daha karmaşık örneği düşünün:

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

Bu durumda, kaynak commentsyepyeni bir ad alanı oluşturur. Bu, bu durumda ortaya çıkan rotaların aşağıdaki olacağı anlamına gelir. Gördüğünüz gibi, yorum kaynağı için Rota, Denetleyici ve Görünüm, ana yolun adıyla ön ekli değildir. Bu, bir kaynağı başka bir kaynak içine yerleştirmenin ad alanını sıfırladığı anlamına gelir (= yeni bir ad alanı oluşturur).

  • PostsRoute, PostsController, PostsView
  • PostsIndexRoute, PostsIndexController, PostsIndexView
  • MesajlarNewRoute, PostsNewController, PostsNewView
  • CommentsRoute, CommentsController, CommentsView
  • CommentsNewRoute, CommentsNewController, CommentsNewView
  • AnotherRoute, AnotherController, AnotherView

Bu davranış aynı zamanda Ember Docs'da açıklanmıştır .


4
Ember kılavuzlarında bu daha net olmalıdır. Bu kavram ilk başta kesinlikle kafam karışmıştı.
Gabriel G. Roy

Mükemmel bir gönderinin mükemmel özeti. Ama şunlardır son alıntı mantıklı değil: That namespace will have an " which [...]. Ne anlama "geliyor? Bu sadece Route için bir yer tutucu mu | Denetleyici | Görünüm?
Patrick M

Hey Patrick, bunu gösterdiğin için teşekkürler. Artık bundan bir ipucu alamıyordum. Bu nedenle iç içe geçmiş kaynaklarla daha karmaşık bir örnek ekledim. Sanırım bu alıntı bu senaryoya atıfta bulundu.
mavilein

Bu çok daha net. Ekstra örnek için teşekkürler mavilein.
Patrick M

App.Router.map(function() { this.route("posts", { path: "/" }, function() { this.route("new"); this.route("comments"}, function() { this.route("new"); }); }); this.route("another", { path: "/another" }); });
Timo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.