「ニーズ」機能により、コントローラーは他のコントローラーにアクセスできるようになり、コントローラーのビューが他のコントローラーにアクセスできるようになります。(Ember のニーズについての適切な説明: http://darthdeus.github.com/blog/2013/01/27/controllers-needs-explained/ )
Cannot access Controller in init function in View in 1.0.0rc で説明されているように、ビューのcontroller
プロパティは が呼び出された時点ではまだ設定されていないため、ビューのライフ サイクルの後半でinit()
アクセスする必要があります。controller
これは、たとえば、willInsertElement()
またはフックである可能性があります。didInsertElement()
ビューからニーズにアクセスする別のコントローラーを使用する例を次に示します。
http://jsbin.com/ixupad/186/edit
App = Ember.Application.create({});
App.ApplicationController = Ember.Controller.extend({
doSomething: function(message) {
console.log(message);
}
});
App.IndexView = Ember.View.extend({
templateName: 'index',
init: function() {
this._super();
// doesn't work, controller is not set for this view yet see:
// https://stackoverflow.com/questions/15272318/cannot-access-controller-in-init-function-of-view-in-1-0-0rc
//this.get('controller.controllers.application').doSomething("from view init");
},
willInsertElement: function() {
this.get('controller.controllers.application').doSomething("from view willInsertElement");
},
clickMe: function() {
this.get('controller.controllers.application').doSomething("from clickMe");
}
});
App.IndexController = Ember.Controller.extend({
needs: ['application']
});