我正在寻找一种方法来改变模板,具体取决于子路由是否处于活动状态。
假设我们有路由/post/1/
和/post/1/comments
。
我希望post.hbs
能够做到这样的事情:
<div class={{if isChildRouteActive 'compact' 'expanded'}}>...</div>
{{outlet}}
这样/post/1
会产生isChildRouteActive=false
而/posts/1/comments
会产生isChildRouteActive=true
。
可以用这种方式概念化它:
{{#if outlet}}...{{else}}...{{/if}}
如何将此属性公开给我的所有模板?
答案 0 :(得分:0)
我认为index
儿童路线对你有好处。每个父路由都有index
路由子路由,以便在其他子路由处于非活动状态时显示。请参阅此处http://guides.emberjs.com/v1.12.0/routing/defining-your-routes/
index route
部分
在你的例子中:
// post template
{{outlet}}
//post/index template
You see this text when post.comments route is inactive. If you activate post.comments this text will dissapear and you will see comments quantity.
//post/comments template
Comments: {{comments.length}}
答案 1 :(得分:0)
这对你来说可能很好。
//post controller
import Ember from 'ember';
export default Ember.Controller.extend({
isChildRouteActive: false,
});
//child route
import Ember from 'ember';
export default Ember.Route.extend({
parentController: Ember.computed( function() {
return this.controllerFor('post');
}),
setupController: function(controller, model) {
this._super(controller, model);
this.get('parentController').set('isChildRouteActive', false);
},
deactivate: function() {
this.get('parentController').set('isChildRouteActive', true);
}
});