2012-10-10 17 views
6

Tôi có một ứng dụng ember và khái niệm về ổ cắm và kết nối ổ cắm là tốt, tôi hiểu điều đó. Những gì tôi không hiểu là làm cách nào để có nhiều chế độ xem/bộ điều khiển bên trong một chế độ xem khác mà không cần lồng vào nhauKiến trúc ứng dụng Router Ember.js - Cách có nhiều cặp khung nhìn/bộ điều khiển lồng nhau

Giả sử tôi đang thiết kế icloud clone nơi tôi có chức năng email và chức năng thư viện ảnh. Bây giờ nếu tôi muốn đạt được cái gì đó như

*********************************************************** 
* INBOX LIST  ** COMPOSE OR VIEW MESSAGE    * 
*    **          * 
*    **          * 
*    **          * 
*    **          * 
* CONTACTS LIST **          * 
*    **          * 
*    **          * 
*    **          * 
*    **          * 
*********************************************************** 

Cách mà tôi muốn thiết kế này sẽ là một cái gì đó giống như

EmailController/View 
|-- SplitViewController/View 
    |-- InboxListController/View 
    |-- ContactsListController/View 
    |-- ComposeMessageController/View 
    |-- ReadMessageController/View 

đâu tôi có thể trao đổi nóng này để mức độ của SplitView hoặc loại bỏ chúng tất cả, nhưng tôi không thấy một cách tốt để làm điều này chỉ với một outlet được cho phép. Nó sẽ buộc tôi những thứ tiếp theo bên trong những thứ không nên lồng nhau. Sử dụng cách tiếp cận lối thoát duy nhất, cấu trúc của tôi sẽ trông giống như

EmailController/View 
|-- SplitViewController/View 
    |-- InboxListController/View 
     |-- ContactsListController/View 
      |-- ComposeMessageController/View 
       |-- ReadMessageController/View 

Làm thế nào tôi sẽ tìm thấy một phong cách kiến ​​trúc phù hợp với Ember.js/Router mà vẫn cho phép làm tổ phức tạp hơn?

Trả lời

8

Bạn có biết bạn có thể đặt tên cho các cửa hàng không? Ví dụ, trong mẫu SplitView, bạn có thể có một {{ổ cắm inboxListView}}, {{một ổ cắm contactsListView}} vv ... khi bạn làm công cụ connectOutlets của bạn, bạn có thể làm được điều này như:

splitViewController.connectOutlet({name: 'inboxList', outletName: 'inboxListView'}) 
splitViewController.connectOutlet({name: 'contactsList', outletName: 'contactsListView'}) 

và Vì vậy, ...

+0

Vì vậy, nếu bạn đang sử dụng các cửa hàng được đặt tên khác nhau cho các chế độ xem/đối tượng mô hình khác nhau trong SplitView, bộ định tuyến của bạn sẽ trông như thế nào? splitViewController.connectOutlet ({name: 'inboxList', outletName: 'inboxList'}, router.get ('store'). findAll (App.Inbox))) và splitViewController.connectOutlet ({name: 'contactsList', outletName: 'contactsList'}, router.get ('store'). findAll (App.Contact)))? –

+0

smth như thế này có, nhưng phải đặt bối cảnh vào băm. '{name: 'contactsList', outletName: 'contactsList', ngữ cảnh: router.get ('store'). findAll (App.Contact)})' xem http://emberjs.com/api/classes/Ember.ControllerMixin .html # method_connectOutlet để biết thêm chi tiết –

+0

@ sly7_7 Đó là tin tuyệt vời! Cảm ơn :) – wmarbut