这种情况,因为当视图被创建(= Ember对象)时init()被调用。某处Ember做了类似于以下的事情。然后你的init被调用。
var view = Ember.View.create({});
此时控制器未被分配。控制器稍后分配。大多数时候,这是你的路线。看看这个代码渲染代码路线:
function setupView(view, container, options) {
var defaultView = options.into ? 'view:default' : 'view:toplevel';
view = view || container.lookup(defaultView); // the view gets created here and init gets called
if (!get(view, 'templateName')) {
set(view, 'template', options.template);
set(view, '_debugTemplateName', options.name);
}
set(view, 'renderedName', options.name);
set(view, 'controller', options.controller); // controller gets assigned to view
return view;
}
正如你所看到的,在第一视图被实例化和事后控制器分配它。
为什么Ember会这么做?这不是错吗? 您目前的理解是,总是有一个控制器与您的视图相关联。但情况并非总是如此。以{{view}}助手为例。通常你用contextBinding来设置它。所以'控制器'属性并不总是设置!
你应该怎么做你的情况? 您没有详细说明您的要求,但您应该没问题使用willInsertElement()挂钩。这是元素在DOM之前。这应该是足够早的访问它,对吧?
yes..you无法初始化得到()函数 – thecodejack 2013-03-07 13:37:14