これが私がやったことです。動作しますが、複雑すぎるように見えるので、根本的な欠陥があると思われます。修正および/または改善は大歓迎です。
ナビゲーション バーを作成するビューは次のとおりです。
<script type="text/x-handlebars" data-template-name="nav">
<ul class="nav">
{{#each navs}}
<li {{bindAttr class="isActive:active"}}><a href="#" {{action select link}}> {{title}}</a></li>
{{/each}}
</ul>
</script>
そして、これを駆動するための膨大な量のコードがあります:)
App.ApplicationController = Ember.Controller.extend({
active: 'index'
});
App.ApplicationRoute = Ember.Route.extend({
setupController: function(){
var active = this.controllerFor('application').get('active');
this.controllerFor('nav').set('model',{
active:'index',
navs: [
{ link:"index", title:'Toad', isActive: active === 'index' },
{ link:"lunches", title:'Lunches', isActive: active === 'lunches' },
{ link:"people", title:'People', isActive: active === 'people' }
]
});
},
events: {
select: function (item) {
var nav = this.controllerFor('nav');
var app = this.controllerFor('application');
app.set('active',item);
var active = app.get('active');
var navs = nav.get('navs');
new_navs = [];
for (var i = navs.length - 1; i >= 0; i--) {
new_navs[i] = { link: navs[i].link, title: navs[i].title, isActive: active === navs[i].link} ;
};
nav.set('navs',new_navs);
this.transitionTo(item);
}
}
});
App.NavController = Ember.ObjectController.extend({
});
// Routes
App.Router.map(function() {
this.route("people");
this.route("lunches");
});
App.PeopleRoute = Ember.Route.extend({
setupController: function(controller, model) {
this.send('select','people');
controller.set('people', App.People.find());
},
});
App.LunchesRoute = Ember.Route.extend({
setupController: function(controller, model) {
this.send('select','lunches');
controller.set('lunches', App.Event.find());
},
});
お願い、頑張ってこれをバラバラにして、私を正して!