View Ember.js-子嵌套视图';控制器

View Ember.js-子嵌套视图';控制器,view,controller,ember.js,View,Controller,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="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>
问题1: 难道没有比重写视图的init方法来设置其控制器更好的解决方案吗

问题2: 如何从CalendarDayController访问CalendarController的oneDayHover

提前谢谢你的帮助

更新1:
我应该指出,这些控制器存在于相同的状态。鼠标指针的作用是在CalendarDayView顶部显示一个包含额外信息的弹出窗口。

1-不要手动将控制器分配给视图。让Ember来完成繁重的工作!看看Embers路由器API/如何定义路由。管线将连接控制器和视图并渲染它们()

2-如果您遵循第1点,您的另一个问题将通过Embers依赖注入方式变得简单:

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>

注意:我自己还没有使用控件助手,但它应该是这样工作的。

1-不要手动将控制器分配给视图。让Ember来完成繁重的工作吧!看看Embers路由器API/如何定义路由。管线将连接控制器和视图并渲染它们()

2-如果您遵循第1点,您的另一个问题将通过Embers依赖注入方式变得简单:

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>

注意:我自己还没有使用控制助手,但这应该是它的工作方式。

Thx用于快速反馈,但我不确定我是否需要路由,因为控制器处于相同的状态。我应该更新帖子并添加这些信息。有没有一种方法可以声明适用于此案例的路由?嗨,mavilein,再次感谢您的更新。我试过控制助手。这可能是解决方案,但现在所有calendarDayView都链接到同一个链接。这就像ember实例关联calendarDayController的一个实例,并在必要时重用它。。。你知道怎么解决吗?奇怪。那么我还没有完全理解这个助手的目的。这是Github项目中的一个问题:。他们建议将此特定控制器设置为非单例,例如:Reader=Ember.Application.create({});寄存器('controller:index_image',Reader.IndexImageController,{singleton:false});在您的情况下,它必须是:App=Ember.applicato.create();App.register('controller:calendarDay',App.CalendarDayController,{singleton:false});嗨,是的,我试过了收银机,它工作了。。。再次感谢。。。也许您应该在解决方案中添加此技巧;-)Thx用于快速反馈,但我不确定我是否需要路由,因为控制器处于相同的状态。我应该更新帖子并添加这些信息。有没有一种方法可以声明适用于此案例的路由?嗨,mavilein,再次感谢您的更新。我试过控制助手。这可能是解决方案,但现在所有calendarDayView都链接到同一个链接。这就像ember实例关联calendarDayController的一个实例,并在必要时重用它。。。你知道怎么解决吗?奇怪。那么我还没有完全理解这个助手的目的。这是Github项目中的一个问题:。他们建议将此特定控制器设置为非单例,例如:Reader=Ember.Application.create({});寄存器('controller:index_image',Reader.IndexImageController,{singleton:false});在您的情况下,它必须是:App=Ember.applicato.create();App.register('controller:calendarDay',App.CalendarDayController,{singleton:false});嗨,是的,我试过了收银机,它工作了。。。再次感谢。。。也许您应该在解决方案中添加此技巧;-)