0

J'ai un bouton comme défini ci-dessous.Bouton de re-basculement de Bootstrap après que Ember l'ait déjà basculé lors du re-rendu

<button type="button" 
    class="btn btn-primary-outline {{if shouldBeActive "active"}}" 
    data-toggle="button" 
    {{action "makeActive"}}>MyButton</button> 

L'action makeActive permet de basculer la propriété shouldBeActive, ce qui provoque le bouton pour gagner ou perdre la classe .active quand Ember re-rend le modèle.

Tout cela est une grande ... sauf que les bootstrap.js cliquez sur Gestionnaire pour basculer .active classe du bouton est alors Déclenché après l'Ember a mis à jour le DOM, ce qui provoque le bouton pour être basculée dans l'état basculée incorrect.

Existe-t-il un moyen éloquent pour résoudre ce problème? Ma seule pensée est que je pouvais faire quelque chose de stupide comme ...

<button type="button" 
    class="btn btn-primary-outline {{if (xor shouldBeActive isFirstRender) "active"}}" 
    data-toggle="button" 
    {{action "makeActive"}}>MyButton</button> 

... pour régler efficacement l'état actif à l'opposé de ce qui est prévu et laissez-bootstrap bascule à ce qui est approprié.

+0

Vous devez décider de ce qui doit gérer ce clic. Pourquoi avez-vous besoin d'un gestionnaire de clic Bootstrap? Si vous avez un gestionnaire de clics Bootstrap, pourquoi en avez-vous besoin d'un autre dans Ember pour basculer la propriété? On dirait que vous devez décider et déplacer toute la logique à 1 gestionnaire. –

+0

@DanielKmak Je n'ai aucun contrôle sur le gestionnaire de clic Bootstrap; il existe dans bootstrap.js. Bootstrap.js est nécessaire pour que d'autres composants bootstrap fonctionnent, donc il n'y a pas d'évitement, y compris ce fichier js. – kjb

+1

Que faire si vous supprimez: 'data-toggle =" le bouton "'? –

Répondre

2

On dirait que le gestionnaire de démarrage Bootstrap ne se déclenchera que si vous conservez data-toggle="button", donc le supprimer devrait entraîner le déclenchement du gestionnaire Ember uniquement.

+0

Je me suis retrouvé coincé dans une ornière mentale où je pensais avoir besoin du bouton 'data-toggle =" "' pour que le bouton puisse basculer. On aurait dû se rendre compte que l'ajout de l'action au bouton fait exactement cela puisque le brai effectue ensuite un re-rendu et définit la classe "active" elle-même. Merci! – kjb