這種情況,因爲當視圖被創建(= 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