現在、残り火でルーティングを実験しており、実際の例があります。問題は、なぜそれが機能するのか少し混乱していることです。現在、このルートには2つの単純なビューがあります。コードは次のとおりです。
App = Em.Application.create();
App.Router = Ember.Router.extend({
root: Ember.Route.extend({
index: Ember.Route.extend({
route: '/',
redirectsTo: 'home' //when hitting the base URL, redirect to home
}),
home: Ember.Route.extend({
route: '/home',
connectOutlets: function(router) {
router.get('applicationController').connectOutlet('home');
}
}),
about: Ember.Route.extend({
route: '/about',
connectOutlets: function(router) {
router.get('applicationController').connectOutlet('about');
}
})
})
});
//Main controller + view
App.ApplicationController = Ember.Controller.extend({});
App.ApplicationView = Ember.View.extend({
templateName: 'application',
goHome: function(){
App.router.transitionTo('home');
},
goAbout: function(){
App.router.transitionTo('about');
}
});
// Home page
App.HomeView = Ember.View.extend({
templateName: 'home'
})
// About page
App.AboutController = Ember.Controller.extend({
numWidgets: 45
})
App.AboutView = Ember.View.extend({
numWidgetsBinding: 'App.aboutController.numWidgets',
templateName: 'about'
})
App.initialize();
私のHTMLには、「application」、「home」、「about」という名前の非常に単純なテンプレートがいくつかあります。
したがって、それはすべて機能し、ネット上に浮かんでいるすべての例と非常によく似ています。素晴らしい!しかし、私は、私がそれをするように頼むことなく、私のためにいくつかのことをインスタンス化したように見えることについて混乱しています。これは正しいです?
例えば:
ApplicationControllerのインスタンスをどのように作成していますか?
connectOutlets関数では、「applicationController」と呼ばれるコントローラーを探しています。「applicationController」(小文字の「a」)と呼ばれるものを作成したことはありません。コントローラーを拡張して「ApplicationController」(大文字の「A」)と呼びました。なぜこれが機能するのですか?
AboutControllerのインスタンスをどのように作成していますか?
「about」ページビューとコントローラーの間で簡単なテストバインディングを実行しました。ビューでは、変数「App.aboutController.numWidgets」を使用してバインドしています。App.AboutController.create()を呼び出したことはありません。それで、私が話す準備ができているこのインスタンスはどのようにありますか?ここでも、小文字( "aboutController")があります。私が今までにしたことは、コントローラーを拡張することだけでした(そして大文字で名前を付けました-「AboutController」)
通常の開発者と同じように、少し説明するとよいでしょう。なぜ機能しているのかわからないコードを使用するのはおかしいと思います。