Apa perbedaan antara rute dan sumber daya di API Router Baru?


114

Saya mencoba memahami perbedaan antara a Routedan a Resource. Cara saya memahami Resourcemembantu untuk mengatur sub path dari suatu Routeobjek ke RouteObjek lain . Tetapi tidak jelas ketika saya memikirkan pemetaan nama default yang terjadi untuk jalur juga.

Jawaban:


101

Harap Perhatikan bahwa mulai 1.11.0 dan seterusnya, this.route hanya digunakan sebagai pengganti this.resource. Sumber: http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *

Lihat posting ini untuk penjelasan rinci.

Ini adalah ringkasan kasar dari posting ini (saya telah mengubah sedikit):

Sejak peralihan ke resource dan rute, banyak orang yang bingung tentang arti keduanya dan bagaimana pengaruhnya terhadap penamaan. Inilah perbedaannya:

  • sumber daya - sesuatu (model)
  • rute - ada hubungannya dengan benda itu

Jadi ini berarti router yang menggunakan rute dan sumber daya mungkin terlihat seperti ini:

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

Ini akan menghasilkan rute berikut yang dibuat / digunakan:

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

Seperti yang kita lihat dari contoh ini, sumber daya mempengaruhi penamaan Pengendali, Rute dan Tampilan yang digunakan / dibuat (Rute "baru" diperlakukan sebagai bawahan sumber daya "pos"). Kutip dari sumber aslinya (saya memodifikasinya, karena menjengkelkan seperti yang ditunjukkan Patrick M dengan benar di komentar):

Ini berarti setiap kali Anda membuat sumber daya, itu akan membuat namespace baru. Namespace itu dinamai sumber daya dan semua rute anak akan dimasukkan ke dalamnya.

Update: contoh yang lebih kompleks dengan resource bersarang

Pertimbangkan contoh yang lebih kompleks berikut dengan beberapa sumber daya bersarang:

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

Dalam hal ini, sumber daya commentsmembuat namespace baru. Ini berarti rute yang dihasilkan dalam kasus ini adalah sebagai berikut. Seperti yang Anda lihat, Route, Controller dan View untuk sumber daya komentar tidak diawali dengan nama rute induk. Itu berarti menumpuk sumber daya dalam sumber daya lain menyetel ulang namespace (= membuat namespace baru).

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

Perilaku ini juga dijelaskan di Ember Docs .


4
Ini harus lebih jelas di panduan Ember. Awalnya saya bingung dengan konsep ini.
Gabriel G. Roy

Ringkasan luar biasa dari postingan yang sangat bagus Tapi kutipan terakhir Anda termasuk tidak masuk akal: That namespace will have an " which [...]. Apa "maksudnya Apakah itu hanya placeholder untuk Route | Pengendali | Melihat?
Patrick M

Hei Patrick, terima kasih sudah menunjukkannya. Saya tidak bisa membuat petunjuk lagi. Oleh karena itu saya menambahkan contoh yang lebih kompleks dengan sumber daya bersarang. Saya pikir kutipan ini mengacu pada skenario ini.
mavilein

Itu jauh lebih jelas. Terima kasih atas contoh ekstra, mavilein.
Patrick M

Bisakah Anda menguraikan apa perbedaan (jika ada) antara contoh Anda dan ini: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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.