2013-03-07 88 views
1

我正在用Ember構建一個簡單的日曆應用程序。我的觀點是嵌套這樣:Ember.js - 子嵌套視圖'控制器

<script type="text/x-handlebars" data-template-name="calendar"> 
    {{content.monthAsString}} 
    {{#each day in content.days}} 
     {{view App.DayView contentBinding="day"}} 
    {{/each}} 
</script> 

<script type="text/x-handlebars" data-template-name'="calendarDay"> 
    {{content.date}} 
</script> 

我的JS代碼:

App.CalendarController = Ember.ObjectController.extend({ 
    content:App.Calendar.create(...); 
    oneDayHover:function(day){ 

    } 
}); 
App.CalendarView = Ember.View.extend({ 
    templateName:"calendar" 
}); 

App.CalendarDayController = Ember.ObjectController.extend({ 
    dayHOver:function(){ 
     //???? HOW TO ACCESS CalendarController????? 
    } 
}); 
App.CalendarDayView = Ember.View.extend({ 
    templateName:"calendarDay", 
    init:function(){ 
     this._super(); 
     this.set('controller', App.CalendarDayController.create()); 
    }, 
    mouseEnter:function(){ 
     this.get('controller').dayHover(); 
    } 
}); 

問題1: 是不是有一個更好的解決方案,而不是覆蓋到設置它的控制器視圖的init方法?

問題2: 如何從CalendarDayController訪問CalendarController的oneDayHover?

在此先感謝您的幫助

更新1: 我應該此話,這些控制器存在於相同的狀態。 mouseenter的要點是在包含額外信息的CalendarDayView頂部顯示一個彈出窗口。

回答

1

1 - 不要手動將控制器分配給視圖。讓Ember做沉重的舉重!查看Embers路由器API /如何定義路由。路線將連接控制器和視圖並渲染它們(Doc)。

2 -如果按照1點,你的其他問題將得到易於使用依賴注入的餘燼方式:響應

App.CalendarDayController = Ember.ObjectController.extend({ 
    needs : ["calendar"], 
    dayHOver:function(){ 
     //Access the single instance of CalendarController 
     var calendarController = this.get("controllers.calendar"); 
    } 
}); 

更新評論:

的CalendarRoute創建含蓄。因此,所有你需要做的,是修改你的模板,我猜:

<script type="text/x-handlebars" data-template-name="calendar"> 
    {{content.monthAsString}} 
    {{#each day in content.days}} 
     {{control "calendarDay" day}} 
    {{/each}} 
</script> 

正如你看到的,我建議使用{{控制}}幫手。上面有什麼基本的代碼說的是:

「親愛的灰燼,請使用名稱‘calendarDay’來查找 App.CalendarView和App.CalendarDayController並用它們來渲染 的對象日」

另外,你要告訴燼,它應該不使用控制器爲單(這是defaul行爲):

App.register('controller:calendarDay', App.CalendarDayController, {singleton: false }); 

說明:我自己還沒有使用控制助手,但這應該是它的工作方式。

+0

Thx的快速反饋,但我不知道我需要一個路線,因爲控制器處於相同的狀態。我應該更新帖子並添加此信息。有沒有辦法申報適用於這種情況的路線? – Fiftoine 2013-03-07 19:39:43

+0

我已經更新了我的回覆。 – mavilein 2013-03-08 09:26:03

+0

嗨mavilein,再次感謝您的更新。我試過控制助手。這可能是解決方案,但現在所有calendarDayView鏈接到相同的說法。這就像ember instanciate calendarDayController的一個實例,並在必要時重用它......你知道一個竅門來解決這個問題嗎? – Fiftoine 2013-03-08 12:45:47