Tôi đang cố gắng hiểu sự khác biệt giữa Route
và Resource
. Cách tôi hiểu Resource
giúp đặt đường dẫn con của đối tượng Route
sang đối tượng Route
khác. Nhưng nó không rõ ràng khi tôi nghĩ về lập bản đồ tên mặc định xảy ra cho đường dẫn là tốt.Sự khác biệt giữa tuyến đường và tài nguyên trong API bộ định tuyến mới là gì?
Trả lời
Xin lưu ý rằng từ 1.11.0 trở đi,
this.route
chỉ được sử dụng thay vìthis.resource
. Nguồn: http://guides.emberjs.com/v1.11.0/routing/defining-your-routes/ *
Có một cái nhìn tại post này cho một lời giải thích chi tiết.
Đây là một bản tóm tắt sơ bộ bài đăng này (tôi đã sửa đổi một chút):
Kể từ khi thay đổi tài nguyên và tuyến đường có rất nhiều người đang bối rối về ý nghĩa của hai và làm thế nào họ ảnh hưởng đến đặt tên. Đây là sự khác biệt:
- tài nguyên - một điều (một mô hình)
- đường - một cái gì đó để làm với điều
Vì vậy, điều này có nghĩa một router sử dụng một tuyến đường và tài nguyên có thể trông như thế này:
App.Router.map(function() {
this.resource("posts", { path: "/" }, function() {
this.route("new", { path: "/new" });
});
this.route("another", { path: "/another" });
});
Điều này sẽ dẫn đến các tuyến đường sau được tạo/sử dụng:
- PostsRoute, PostsController, PostsView
- PostsIndexRoute, PostsIndexController, PostsIndexView
- PostsNewRoute, PostsNewController, PostsNewView
- AnotherRoute, AnotherController, AnotherView
Như chúng ta thấy từ ví dụ này, hiệu ứng tài nguyên việc đặt tên của bộ điều khiển, tuyến đường và chế độ xem đang được sử dụng/được tạo (Tuyến đường "mới" được coi là cấp dưới cho tài nguyên "bài đăng"). Cite từ nguồn gốc (i sửa đổi nó, bởi vì nó là khó chịu như Patrick M một cách chính xác chỉ ra trong các ý kiến):
Điều này có nghĩa bất cứ khi nào bạn tạo một nguồn tài nguyên nó sẽ tạo ra một thương hiệu mới namespace. Không gian tên đó được đặt tên theo tài nguyên và tất cả các tuyến con sẽ được chèn vào nó.
Cập nhật: ví dụ phức tạp hơn với các nguồn lực lồng nhau
xem xét như sau ví dụ phức tạp hơn với nhiều nguồn lực lồng nhau:
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" });
});
Trong trường hợp này tài nguyên comments
tạo ra một thương hiệu không gian tên mới.Điều này có nghĩa là các tuyến kết quả trong trường hợp này sẽ như sau. Như bạn có thể thấy Lộ trình, Bộ điều khiển và Chế độ xem cho tài nguyên nhận xét không được đặt trước bằng tên của tuyến đường mẹ. Điều đó có nghĩa là lồng ghép tài nguyên trong tài nguyên khác sẽ đặt lại vùng tên (= tạo một không gian tên mới).
- PostsRoute, PostsController, PostsView
- PostsIndexRoute, PostsIndexController, PostsIndexView
- PostsNewRoute, PostsNewController, PostsNewView
- CommentsRoute, CommentsController, CommentsView
- CommentsNewRoute, CommentsNewController, CommentsNewView
- AnotherRoute, AnotherContro ller, AnotherView
Hành vi này cũng được giải thích trong Ember Docs.
- 1. Sự khác biệt giữa tài nguyên và tài nguyên trong định tuyến đường ray?
- 2. Sự khác biệt giữa tuyến đường và tuyến đường trong tệp GPX
- 3. Sự khác nhau giữa tuyến đường tốc độ node.js và bộ điều khiển là gì?
- 4. Sự khác biệt giữa khoảng trống nội tuyến tĩnh và khoảng trống là gì?
- 5. khác biệt giữa tuyến đường thu gom và tuyến đường thành viên trong ruby trên đường ray?
- 6. Sự khác biệt giữa mẫu và đường dẫn là gì?
- 7. Tuyến đường Ruby on Rails - sự khác biệt giữa nhận và khớp
- 8. Sự khác biệt giữa hai hình thức lắp ráp nội tuyến trong C là gì?
- 9. Tuyến đường và tuyến đường ray Ember
- 10. Sự khác biệt giữa Tài nguyên và Tài nguyên được nhúng trong ứng dụng C# là gì?
- 11. Sự khác biệt giữa nguyên tử trong Lisp thường và nguyên tử trong Clojure là gì?
- 12. Sự khác biệt giữa khẳng định và static_assert là gì?
- 13. Sự khác biệt giữa hệ thống và đường sau và đường ống trong Perl là gì?
- 14. Gọi các tuyến đường đã được xác định trong các tuyến đường khác trong Express NodeJS
- 15. Sự khác biệt giữa đúc và co giật là gì?
- 16. Sự khác biệt giữa gVim và gVim là gì?
- 17. Sự khác biệt giữa `đối tượng mới()` và `mới {}` trong C# là gì?
- 18. Trong Ember.js, sự khác biệt giữa [] và Ember.A ([]) là gì?
- 19. Sự khác biệt giữa BlobBuilder và hàm tạo Blob mới là gì?
- 20. Đường ray 3: định tuyến tài nguyên cho một tên khác
- 21. SQLAlchemy: Sự khác biệt giữa flush() và commit() là gì?
- 22. Sự khác biệt chính giữa API Repa 2 và 3 là gì?
- 23. Sự khác biệt giữa '&' và ',' trong Generics Java là gì?
- 24. Sự khác biệt giữa & và && trong MATLAB là gì?
- 25. Sự khác biệt giữa ASP.NET và ASP.NET MVC là gì?
- 26. Sự khác biệt giữa việc sử dụng tính năng phát và chạy trò chơi là gì?
- 27. Sự khác biệt giữa RoutedCommand và RoutedUICommand là gì?
- 28. Sự khác biệt giữa dealloc và viewdidunload là gì?
- 29. Sự khác biệt giữa ascx và .cshtml là gì?
- 30. Asp.net MVC/Định tuyến Api Web: Cần định tuyến một chút khác nhau
Điều này sẽ rõ ràng hơn trong hướng dẫn của Ember. Lúc đầu, tôi hoàn toàn bị nhầm lẫn bởi khái niệm này. –
Tóm tắt tuyệt vời về bài đăng tuyệt vời. Nhưng trích dẫn cuối cùng bạn đưa vào không có ý nghĩa: 'Không gian tên đó sẽ có một" cái [...] '. Ý nghĩa của' "nghĩa là gì? Nó chỉ là một giữ chỗ cho Route | Điều khiển | Lượt xem? –
Xin chào Patrick, cảm ơn vì đã chỉ ra điều đó. Tôi không thể làm cho một đầu mối ra khỏi nó nữa. Do đó tôi đã thêm ví dụ phức tạp hơn với các tài nguyên lồng nhau. Tôi nghĩ rằng trích dẫn này đề cập đến kịch bản này. – mavilein