如何在EmberJS中为多个不同的路由设置链接'active'

时间:2013-11-27 18:04:50

标签: binding ember.js

我想在Ember link-to helper上为多个路由设置'active'类,其中路由嵌套。 即。如果我有一个指向route1的链接,我希望它在当前路由为route1或route2时处于活动状态。

东西,比如:

{{#link-to 'route1' currentWhen="route1, route2"}}Things-N-Stuff{{/link-to}}

我的下一个理想场景是在路线处于活动状态时设置(或查找)布尔值,然后执行以下操作:

{{#link-to 'route1' class="isRoute1:active isRoute2:active"}}Not-as-good{{/link-to}}

但我宁愿免费拿起它。也许有一个默认的isRoutename布尔值尚未在文档中......?


还没有答案。我最终这样做了:

{{#linkTo "things" tagName="li" href=false}}
    <a {{bindAttr href="view.href"}} {{bindAttr class="isThingsLinkActive:active"}}>Things</a>
{{/linkTo}}

然后在App.ApplicaitonController

isThingsLinkActive: function(){
    return ['things.index','thing.index','stuff.index'].contains( this.get('currentPath') );
}.property('currentPath'),

这意味着我需要在app控制器中为每个“重载”链接提供类似的东西。使用ember生成的默认标志/属性在模板中完全捕获它会不会更清晰?我愿意接受一个更优雅的解决方案......任何人?

2 个答案:

答案 0 :(得分:10)

根据link-to#active documentation,您可以使用空格分隔的“currentWhen”来执行此操作,但这需要Ember 1.8。

{{#link-to 'route1' currentWhen="route1 route2"}}Things-N-Stuff{{/link-to}}

这也可能是您可以在早期版本中启用的功能:

请参阅https://github.com/emberjs/ember.js/blob/master/FEATURES.md

上的'ember-routing-multi-current-when'

或者,您可以使用此SO帖子中描述的方法之一覆盖链接到帮助程序:

Is there a way to pass an array to currentWhen in EmberJS?

答案 1 :(得分:1)

目前截至3.2,正确的语法为:

{{#link-to 'fruits.index' current-when="fruits.index apples.index"}}Link text{{/link-to}}

抱歉,尝试编辑原始答案,但更改少于6个字符。