我使用最新的emberjs 1.0 pre4。
在App.FormController中,我将childView插入到containerView:
containerView.get('childViews').pushObject(
App.FieldData4MultipleChoiceView.create()
);
在这个childView中,我尝试打印“me.get('controller')”:
didInsertElement: function() {
var me = this;
$(".fieldset.group").on("click", ".fieldChoice img", function(e){
var controller = me.get('controller');
console.log(controller); // line A
});
}
问题1: 为什么“line A”返回App.ApplicationController类的实例但不返回App.FormController?
问题2: 如何在任何其他视图中获取App.FormController的单个实例(不仅仅是App.FormController下的视图)?
非常感谢!
答案 0 :(得分:1)
问题1:为什么“line A”返回App.ApplicationController类的实例而不是App.FormController?
你的例子说“在App.FormController中,我将一个childView插入到一个容器视图中”但是不清楚该容器是如何存在的,或者它的上下文是什么。那个childView将继承它的父元素的上下文,所以我的猜测是containerView本身没有App.FormController
作为它的控制器。
问题2:如何在任何其他视图中获取App.FormController的单个实例(而不仅仅是App.FormController下的视图)?
你不能,至少不能没有真正破解ember的内部API。这是设计的。每个视图都应该非常轻量级,并且只依赖于它的相应控制器。该控制器可以绑定到App.FormController或其中一个属性,但视图不需要知道。
答案 1 :(得分:0)
问题1:为什么“A行”会返回一个实例 App.ApplicationController类但不是App.FormController?
我不太明白为什么没有将上下文传递给视图,但是您可以在实例化视图时通过传递它来自己指定控制器:
App.FieldData4MultipleChoiceView.create({ controller: this.get('formController'); });
问题2:我怎样才能获得任何App.FormController的单个实例 其他视图(不只是App.FormController下的视图)?
如果您按照自己的方式进行操作,则需要通过控制器。您可以在自动把手中使用{{render "my"}}
,这会自动附加MyView
和MyController
。但是,如果您不这样做,那么您可以使用setupController
传递控制器:
var MyRoute = Ember.Route.extend({
setupController: function(controller) {
controller.set('formController', this.controllerFor('form'));
}
});
现在,您可以从this.get('formController')
实例中访问MyController
。
在EMBER 1.0.0-PRE.5中,我们不再有this.controllerFor
,而是使用needs
来指定任何给定控制器中所需的控制器。