2013-01-01 29 views
1

我是很新的灰燼,我完全迷失了方向找到我的應用程序更好的方法:EmberJs:1個模型,多視圖 - 控制器

應用: 屏幕分爲2種水平splited:

  • 左邊是一個表格填寫個人屬性(名字,姓氏,電子郵件)
  • 右邊是左邊形式的圖形視圖

我不硝酸鉀W¯¯正是最好的解決辦法:

解決方法1:在模型

  • Person對象(實例Person對象的全局變量現在)
  • PersonFormController管理形式,使屬性驗證
  • PersonFormView以顯示錶格
  • PersonRenderedController:管理表格的渲染
  • P ersonRenderedView(僅顯示圖,沒有用戶交互)
  • 的2個控制器具有對人全局變量的引用其內容屬性
  • 使用的「連接網點」連接控制器/視圖 router.get('的ApplicationController ').connectOutlet('left','personForm'); router.get('applicationController')。connectOutlet('right','personRendered');

我不確定這個解決方案,因爲PersonRenderedController不是非常有用,而且用於「插座連通性」。

溶液2:

  • Person對象的模型(實例Person對象的全局變量現在)
  • PersonFormController管理形式,使屬性驗證
  • PersonFormView顯示形式
  • PersonRenderedView(僅顯示視圖,無用戶交互)
  • 沒有personRenderedController(no需要,因爲只有顯示模式此視圖)
  • NO網點但手動創建的2次(表格和呈現)在一般模板

我認爲解決方法1也許是更靈活的(在情況下呈現的視圖需要一個控制器)

你能請指教嗎?

回答

1

解決方案1似乎對我更好。與出口一起總是一個好主意。在這種情況下,您不必創建PersonRenderedController。您可以使用connectOutketin一種適合您需求的方式。以下段落是從源並說明如何使用此方法與選擇散列:

*/ connectOutlet:功能(姓名,上下文){// 規格化參數。支持論點: // // 名 //名稱,背景 // outletName,名 // outletName,名字,背景 //選項 // // 的選項哈希具有以下鍵: // //名稱:控制器的名稱並查看 //以使用。如果通過,名稱 //確定視圖和控制器。 // outletName:出口的名稱,以 //填寫。default:'view' // viewClass:實例化視圖的類 // controller:控制器實例將 //傳遞給視圖 //上下文:應該成爲 //控制器的content的對象,因此也就是 //模板的上下文。

這樣,你可以重用你的1個控制器的人也爲你的其他觀點:

router.get('applicationController').connectOutlet({ 
    outletname: "right", 
    viewClass : App.PersonRenderedView, 
    controller: router.get("personFormController") 
}) 

因此,所有我的建議是使用connectOutlet的更明確的版本,它給你相反更多的控制到基於名稱匹配的默認方法。