2015-06-21 26 views
0

我有一個Ember 1.10應用程序,支持2種模型,學生和家長的API支持,以及每種模型的基本CRUD設置,以及讀/寫消息的能力學生和家長訪問他們各自的/展示頁面時。命名空間,共享模型,在Ember中重複使用控制器

我必須創建一個收件箱,其中的信息以及學生和家長的所有其他數據都可用,並且必須這樣做,但無法更改或添加到api(即,我可以'創建消息端點) 。

基本上,我需要保持學生和家長模型和控制器,因爲他們,但需要能夠從收件箱下的命名空間,像這樣的路線訪問它們:

Students 
    -inbox 
    -index 
    -edit 
    -show 
Parents 
    -inbox 
Inbox 
    StudentInbox <-- should use StudentsRoute and StudentsController 
    -index 
    -show 
    -edit 
    ParentInbox 
    -index 
    -show 
    -edit 

讓來訪/收件箱/ students/123將使用StudentRoute中定義的模型以及StudentController上定義的動作和屬性。 InboxStudentsShowRoute應同樣有權訪問StudentsShowRoute和控制器。

不是從Student和Parent路由和控制器複製並粘貼現有代碼,而是有辦法將從Inbox命名空間下的模板觸發的操作代理到相關的模型和控制器,並保持傳遞參數的能力。

例如,傳入PARAMS像?unread=true而InboxStudentsShow路線上會通過這些向StudentsShowRoute和控制器(和氣泡適當地到它的父路線和控制器)或編輯從學生/收件箱學生/ 123 /編輯模板會像在學生/ 123 /編輯模板上一樣工作?

Ember新手,並且知道必須有更好的方式來重用名稱空間中的現有代碼和代理操作。任何建議將不勝感激!

回答

1

我會在這裏創建一個Mixin,其中包含路由的相同代碼,並在InboxStudentsShowRoute中指定controllerNametemplateName。然後,你在這兩條路線上從這個Mixin延伸。模型,模板,動作,屬性將相同。

例如,傳遞params中什麼樣的?未讀=真,而在 InboxStudentsShow路線會通過這些向StudentsShowRoute和 控制器(和氣泡適當地到它的父路線和 控制器)

我不確定這裏的pass these to the StudentsShowRoute and Controller是什麼意思,但是在一條路由上更改的CONTROLLER屬性應該在另一條路由中保持不變,因爲控制器在Ember中是單身。通過將查詢參數傳遞給另一個路由,我不知道你是什麼意思,因爲如果你轉換到你的應用的其他部分,你改變了URL並且你不能同時擁有2個urls,那麼如何通過查詢參數到另一條路線?

在Ember 1.10查詢參數在控制器中定義,所以我猜行爲將保持不變。的InboxStudentsShowRoute

實施例(移動代碼從StudentsShowRouteStudentsShowMixin,定義控制器和模板的名稱):

import Ember from 'ember'; 
import StudentsShowMixin from '../mixins/students-show'; 

export default Ember.Route.extend(StudentsShowMixin, { 
    controllerName: 'students/show', 
    templateName: 'students/show' 
}); 
+0

謝謝,丹尼爾。我的意思是通過傳遞查詢參數,因爲我希望在InboxStudentsShow模板上執行的操作能夠更改和過濾在StudentsShow中設置的模型,我希望params如'?unread = true'來基於StudentShow模型上的消息未讀。 我真正想要做什麼,我可以在學生和StudentsShow路線已經做 - 這將需要改變的唯一事情是模板。今天我會給你一個解決方案,讓你知道它是如何發展的。我很感激它幹起了代碼庫。 – Jim

+0

我認爲你需要'Ember.Service'來保持兩條路徑中最重要的屬性同步。我會很乾淨的做法。 –

相關問題