Comment puis-je lier à la classe active d'un lien à l'aide de la nouvelle Braise routeur?
Je suis en utilisant Twitter Bootstrap pour la navigation dans mon Ember.js app. Bootstrap utilise un active
classe sur le li
balise qui enveloppe les liens de navigation, plutôt que de définir la active
classe sur le lien lui-même.
Ember.js's nouveau linkTo
helper, un active
classe sur le lien mais (aussi loin que je peux voir) n'offre pas tout à crochet à la propriété.
Maintenant, je suis en utilisant cette approche laide:
{{#linkTo "inbox" tagName="li"}}
<a {{bindAttr href="view.href"}}>Inbox</a>
{{/linkTo}}
Ce sera de sortie:
<li class="active" href="/inbox"><a href="/inbox">Inbox</a></li>
Qui est ce que je veux, mais n'est pas valide HTML.
J'ai aussi essayé de liaison à l'généré LinkView de active
bien de la vue parent, mais si vous le faites, la vue parent sera rendu à deux fois avant de les insérer ce qui déclenche une erreur.
En dehors de recréer manuellement la logique utilisée en interne par le linkTo
de l'aide pour attribuer le active
classe pour le lien, est-il un meilleur moyen d'obtenir cet effet?
- En raison d'un récent changement, ce n'est même pas travailler plus (comme le linkTo helper ne définit pas le point de vue du contexte de son point de vue plus).
- Pour toute personne qui vient sur ce, j'ai trouvé ces réponses pour être plus utile: stackoverflow.com/questions/11628489/...
- Trouvé une meilleure solution here.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également utiliser le lien imbriqué à l':
Nous avons certainement besoin de plus de public, solution permanente, mais quelque chose comme cela devrait fonctionner pour l'instant.
Le modèle:
La définition de la vue:
Cela repose sur un couple de contraintes:
<li>
s. Il y a beaucoup de détails dans les docs sur la façon de personnaliser une vue de l'élément à partir de son JavaScript définition ou de Guidon.Que j'ai fourni un live JSBin de ce travail.
li
ne pas obtenir leactive
classe lorsque l'utilisateur clique dessus. C'est juste le sous-jacent d'ancrage être modifiés par l'défautlinkTo
comportement. Aussi, leApp.NavView.active
propriété n'a paschildViews.firstObject.active
comme une dépendance, donc je ne comprends pas comment c'est censé mettre à jour de toute façon..property("childViews.@each")
qui l'a provoqué à être ré-évalués lors de la childViews changé. Toutefois, cela provoque l'erreur @Nick Ragaz est décrit dans le commentaire ci-dessus. (divulgation complète, je suis en train d'apprendre de braise)property("[email protected]")
dans mon commentaire ci-dessus.viewName
sur lelinkTo
/link-to
ne serait pas la première contrainte de s'en aller?Bien j'ai pris ce que @alexspeller grande idée et l'a converti en braise-cli:
app/components/link-li.js
Dans ma barre de navigation j'ai:
childViews
dans la Lueur de l'ère.Bâtiment sur katz réponse, vous pouvez avoir la
active
bien être recalculées lorsque la valeur liquidative de l'élémentparentView
est cliqué.this.notifyPropertyChange('active');
en vertu de cela._super () " le problème avec l'actualisation est fixé.J'ai juste écrit un composant pour le rendre un peu plus agréable:
Utilisation:
J'ai recréé la logique utilisée en interne. Les autres méthodes semblait plus hackish. Cela permettra également de faciliter la réutilisation la logique d'ailleurs je ne pourrais pas besoin de routage.
Utilisé comme cela.
a
tag a le même effet qu'une classe active sur leli
.4634
dansbootstrap.css
(version 2.3.2):.navbar .nav a.active, .navbar .nav a.active:hover, .navbar .nav a.active:focus
Vous pouvez ignorer l'extension d'une vue et d'utilisation suivantes.
Même sans a href Ember.JS va encore savoir comment raccorder à la batterie LI-éléments.
Pour le même problème ici, je suis venu avec jQuery solution basée sur le doute sur les performances de pénalités, mais il fonctionne hors de la boîte. Je vais rouvrir la Braise.LinkView et étendu.
Des réponses actualisées au moment de la rédaction sont datées. Dans les versions ultérieures de Braise si vous utilisez
{{link-to}}
, il met automatiquement en'active'
classe sur le<a>
élément lors de l'itinéraire actuel correspond à la cible du lien.Donc il suffit d'écrire votre css avec l'espoir que le
<a>
auraactive
et il devrait le faire hors de la boîte.De la chance que la fonctionnalité est ajoutée. Tous les trucs ici qui a été nécessaire pour résoudre ce "problème" avant est assez ridicule.