2013-02-20 31 views

Trả lời

99

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.

+4

Đ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. –

+0

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? –

+0

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

Các vấn đề liên quan