I have a list and I'd like to set one item as class="active" automatically. Given the following bootstrap code:
<ul class="nav">
<li {{bindAttr class="atIndex:active"}}>{{#linkTo "index"}}Index{{/linkTo}}</li>
<li {{bindAttr class="atAbout:active"}}>{{#linkTo "about"}}About{{/linkTo}}</li>
<li {{bindAttr class="atLogin:active"}}>{{#linkTo "login"}}Login{{/linkTo}}</li>
</ul>
atIndex, atAbout and atLogin reside in my ApplicationController.
To render as:
<ul class="nav">
<li class="active"><a...>Index{{/linkTo}}</li>
<li><a...>About<a></li>
<li><a...>Login<a></li>
</ul>
What's the best way to do this with Ember 1.0 pre4? I'd rather not add special code to every view or controller.
PS - atIndex: true
works, but atIndex: function() {return true; }.property().volatile()
does not. Which makes me think I'm doing something wrong.
Thank you!
I found a pretty simple Solution using linked items in a list group(http://getbootstrap.com/components/#list-group-linked).
Works with Bootstrap v3.1.1 and Ember v1.7.0
EDIT: Finally, the best way I've found to use the activate class of bootstrap li element using ember.js of the link.
--------------8<--------------
DEPRECATED:
I guess the previous answers were relevant before Ember.js introduced the activeClass attribute for linkTo helper. Now I would solve the problem like this :
Enber will automatically add the class when relevant.
By far the cleanest way to solve this is by taking advantage of the
linkTo
helper's built-in support for setting the active class when rendering links. AFAIK this is not yet documented other than in the source code:implementation: https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/helpers/link_to.js#L46
example: https://github.com/emberjs/ember.js/blob/master/packages/ember/tests/helpers/link_to_test.js#L120
To take advantage of this feature just adjust your css to style based on having an active class on the link instead of the
li
element. If you really need to style theli
you can create a custom view and helper that extendsEmber.LinkView
and uses anli
but changing css will be far easier.--- UPDATE ----
Since we all love twitter bootstrap just changing the css is perhaps not such a great option. In that case, the following will do the trick:
Working example using ember linkTo helper with bootstrap pills: http://jsbin.com/ekobod/5/edit (requires ember-1.0.0-pre.4)
If I may suggest another solution that requires nothing but Handlebars:
This sets the
LinkView
object as a member of the parent view, which's active attribute you can then reference.If you want to use Bootstrap navigation in Ember then you can use Bootstrap for Ember that has out of the box support for this:
Github: https://github.com/ember-addons/bootstrap-for-ember Demo: http://ember-addons.github.io/bootstrap-for-ember/dist/#/show_components/tabs
I made an ember-cli addon that handles this:
https://github.com/alexspeller/ember-cli-active-link-wrapper