これが当てはまるのは、ビューが作成されたときにinit()が呼び出されるためです(= Emberオブジェクト)。どこかで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を使用して設定します。したがって、「controller」プロパティは常に設定されているわけではありません。
あなたはあなたの場合何をすべきですか?
要件の概要は詳しく説明していませんが、willInsertElement()フックを使用すれば問題ありません。これは、要素がDOMに含まれる前です。それはそれにアクセスするのに十分早いはずですよね?