Comment puis-je détruire toutes les instances de Bootstrap Liste?
J'ai une page unique application à l'aide de colonne vertébrale, et à chaque fois que je cours sur quelque chose et puis cliquez sur le bouton "retour", la liste reste à jamais.
Je veux détruire toutes les instances de la liste lorsqu'une nouvelle instance est chargée.
Vous devez vous connecter pour publier un commentaire.
Trouver les popovers qui sont créés par le biais de l'API de données n'est pas difficile et a été couverte dans d'autres réponses, comme ceux de David Mulder et Amir Popovich. Vous venez de faire:
Ou vous pouvez utiliser
destroy
si vous avez besoin de ou préférez.Le défi est de gérer les popovers sont créés dynamiquement.
Marquant les Éléments avec Popovers
Je voudrais mettre en place quelque chose comme ça. Je voudrais remplacer la valeur par défaut
popover
méthode et je vais l'essayer pour effectuer ce remplacement dès que possible, afin que tout qui a besoin d'une liste utilise mon remplacement. Ce qu'il fait est juste marquer les éléments que l'utilisation d'une liste avec une classe. Bootstrap n'est pas la marque elle-même:Puis effacer tout ce qui est avant le déchargement, je l'avais mis dans le code qui détecte le déchargement suivantes:
Ou il pourrait utiliser
destroy
plutôt quehide
si le test indique que cela fonctionne le mieux pour votre cas d'utilisation.Maintenant, la méthode ci-dessus sera travail si le remplacement se produit assez tôt et vous n'avez pas une page où plusieurs jQueries sont chargés. (Oui, oui, c'est possible.) J'utilise quelque chose de semblable à traiter avec les info-bulles dans une de mes applications donc je connais le principe est sain. Il se trouve que dans mon application, toutes les info-bulles sont créés par mon code donc il n'y a pas de risque de manquer quelque chose.
Trouver Tous les Éléments de Popovers, Même Banalisée
Si vous êtes dans une situation où une liste peut être créée sans être marqué (j'appelle cela un "évadé"), alors vous avez besoin d'interroger l'ensemble des DOM et de trouver les éléments qui ont popovers. Il n'y a pas de raccourci ici. Vous ne pouvez pas compter sur les attributs comme
data-content
parce que popovers peut être créé entièrement de manière dynamique (c'est à dire sans lesdata-
attributs). Aussi, toutes sortes d'éléments peuvent obtenir des popovers, de sorte que vous ne pouvez pas fiable supposons quebutton
éléments auront une liste. Le seul moyen infaillible pour trouver tout ce que les besoins de la manipulation est de regarder chaque élément du DOM et de vérifier si il a une liste:De nouveau,
destroy
pourrait être utilisé plutôt quehide
.Preuve de Concept
Ici est un violon qui illustre l'ensemble de la chose:
"Ajouter une Liste Dynamique" simule un code qui permettrait d'ajouter une liste lorsque le remplacement est en effet.
"Ajouter un Évadé" simule un code qui permettrait d'ajouter une liste et qui arrivent à utiliser l'original du code d'Amorçage.
"Supprimer la sélection" efface que la marqué popovers.
"Tout effacer" efface chaque liste ou non marqué.
.fc-event
et utiliser tous éléments de méthode pour masquer la liste. De cette façon, vous n'avez pas de boucle de tous les éléments dans le document. Vous pouvez réellement utiliservar popover = $.data(this, "bs.popover"); popover.hide();
pour masquer la listeSon très simple, il suffit de vous appelez une fonction à la liste() avec l'argument "détruire" pour détruire la liste. Il va détruire tous les popovers qui est créé par $("[data-toggle=liste]").liste();
vous pouvez vérifier la documentation pour plus d'options et arguments de la liste().
Je vous propose de détruire les popovers à connaître le nom de la classe au lieu d'utiliser de code suivant.
Le code ci-dessus va détruire tous les popovers dans la page. Ainsi, au lieu de cela, utiliser le sélecteur de classe.
Quelque chose de générique comme ceci (en supposant que vous êtes en utilisant les données des fixations) devrait faire l'affaire:
ou les plus extrêmes appel
bien que je doute que souvent. Toujours à l'adresse de bug spécifique vous êtes à la rencontre, vous devez créer un minimum de cas de test de sorte que le bug lui-même, peuvent être envisagées.
Oh, et si vous souhaitez vérifier pour les popovers vous pouvez utiliser
.data("bs.popover").$tip.parent().length
(qui est un peu un hack), par exemple:Vous pouvez
hide
tous les popovers en utilisant ce:Vous pouvez
destroy
tous les popovers en utilisant ce:La différence entre
hide
etdestory
est que lorsque voushide
une liste vous n'avez pas besoin à réactif, mais lorsque vous détruire il vous ne.Découvrez mon
JSFIDDLE
et puis:Cliquez sur tous les popovers, puis cliquez sur
hide
. Après avoir cliqué surhide
vous peut cliquez sur les popovers de nouveau.Cliquez sur tous les popovers, puis cliquez sur
destroy
. Après avoir cliqué surdestroy
essayez de cliquer sur les popovers à nouveau et de voir que rien ne se passera depuis qu'ils sont détruit.Afin de les rendre à nouveau fonctionnel, vous aurez besoin de cliquer sur réactif et puis essayer.
essayer avec ceci:
url de référence: https://getbootstrap.com/docs/4.1/components/popovers/
Popovers doit être initialisé manuellement, de sorte que vous savez exactement ce que vous avez à détruire parce que vous ne l'initialiser.
Vous devez simplement appeler le détruire fonction avec le même sélecteur.
Ou peut-être que je suis absent quelque chose ?