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/ *
Hãy xem bài đăng này để được giải thích chi tiết.
Đây là bản tóm tắt sơ bộ của 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, rất nhiều người đã nhầm lẫn về ý nghĩa của cả hai và cách chúng ảnh hưởng đến việc đặt tên. Đây là sự khác biệt:
- tài nguyên - một thứ (một mô hình)
- tuyến đường - điều gì đó để làm với điều
Vì vậy, điều này có nghĩa là một bộ định tuyến sử dụng một tuyến đường và tài nguyên có thể trông giống như sau:
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 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, tài nguyên ảnh hưởng đến việc đặt tên cho Bộ điều khiển, Đường dẫn và Chế độ xem đang được sử dụng / tạo (Tuyến đường "mới" được coi là cấp dưới của tài nguyên "bài viết"). Trích dẫn từ nguồn gốc (tôi đã sửa đổi nó, vì nó gây khó chịu như Patrick M đã chỉ ra một cách chính xác trong các nhận xét):
Điều này có nghĩa là bất cứ khi nào bạn tạo một tài nguyên, nó sẽ tạo ra một không gian tên hoàn toàn mới. 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 đó.
Cập nhật: ví dụ phức tạp hơn với các tài nguyên lồng nhau
Hãy xem xét ví dụ phức tạp hơn sau với nhiều tài nguyên 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 không gian tên hoàn toàn mới. Điều này có nghĩa là các tuyến đường kết quả trong trường hợp này sẽ như sau. Như bạn có thể thấy Tuyến, Bộ điều khiển và Chế độ xem cho tài nguyên nhận xét không có tiền tố là tên của tuyến mẹ. Điều đó có nghĩa là lồng một tài nguyên trong một tài nguyên khác sẽ đặt lại không gian tên (= tạo một không gian tên mới).
- PostsRoute, PostsController, PostsView
- PostsIndexRoute, PostsIndexController, PostsIndexView
- PostsNewRoute, PostsNewController, PostsNewView
- CommentsRoute, CommentsController, CommentsXem
- CommentsNewRoute, CommentsNewController, CommentsNewView
- AnotherRoute, AnotherController, AnotherView
Hành vi này cũng được giải thích trong Tài liệu Ember .