以下で定義されたコンテナビューがあります
app.MainView = Ember.ContainerView.extend({
childViews: ['navigationView', 'gutterView', 'mainView'],
elementId: 'master',
navigationView: app.NavView,
gutterView: app.GutterView,
mainView: Ember.View.create({
elementId: 'content',
template: Ember.Handlebars.compile('{{outlet contentOutlet}}')
})
});
app.NavView = Ember.View.extend({
elementId: 'main-menu',
classNames: ['navigationPanel'],
template: Ember.Handlebars.compile('{{controller}}')
});
app.NavController = Ember.ArrayController.extend({
content: [],
});
ここでの問題は、このように定義すると、app.NavView (app.NavController) のコントローラーがビューに接続されないことです。テンプレートから NavView の {{controller}} を見ると、ApplicationController が表示されます。
しかし、私がそれを次のように定義すると:
app.MainView = Ember.ContainerView.extend({
childViews: ['navigationView', 'gutterView', 'mainView'],
elementId: 'master',
navigationView: Ember.View.extend({
elementId: 'nav',
template: Ember.Handlebars.compile('{{outlet navOutlet}}')
}),
gutterView: app.GutterView,
mainView: Ember.View.create({
elementId: 'content',
template: Ember.Handlebars.compile('{{outlet contentOutlet}}')
})
});
ルーターのconnectOutletを介してNavViewを接続します
router.get('applicationController').connectOutlet('navOutlet', 'nav');
NavView で接続されているコントローラーは NavController であることがわかりました。これは正しいです。
問題は、ここで何が欠けているかです。ここにアウトレットは必要なく、mainView を通じて作成したいと考えています。ContainerView を使用すると、Ember がビューとコントローラーを正しく接続しないのはなぜですか?