[JAVA] [Rails 5] [Turbolinks] Que faire lorsque JS ne fonctionne pas en raison d'une transition de page ou d'un retour du navigateur

Fonction implémentée

Environnement de développement

ruby > 2.6.5
rails > 5.2.4.2

Implémentation de JS

$(document).ready(function(){
   $("#menu").on("click", function() {
      $(this).next().slideToggle();
   });
});

En utilisant jquery, j'ai ajouté un menu hamburger ouvrable ordinaire. Mis à part les bons et les mauvais du code JS lui-même, il ne devrait y avoir aucun problème de fonctionnement.

Statut

Cela fonctionne bien au moment du chargement initial. Le comportement est étrange au moment de la transition de page et du retour du navigateur. Il s'enflamme avec un clic, mais il boucle l'ouverture et la fermeture et est instable. Il fonctionne normalement lorsqu'il est rechargé.

Examen et contre-mesures

Cela fonctionne, alors peut-être que le moment de chargement est incorrect? → Vous ne pouvez même pas tout essayer comme ready ʻonload ʻajaxStop.

Après avoir consulté M. Google, j'ai trouvé une telle description

$(document).on('turbolinks:load', function () {
...
});

turbolinks: load Je n'ai jamais vu ça ... Apparemment, c'est une description spécifique à Rails.

Manipulation des Turbolinks

J'ai fait référence à cet article. Aide-mémoire turbolinks

Que sont les Turbolinks?

--Bibliothèque Ajax pour accélérer les transitions de page (Gem)

En d'autres termes, cette fonction semble avoir affecté JS cette fois.

Comment gérer les turbolinks

Puisqu'il s'agit d'un joyau, il peut être résolu en l'effaçant, mais il ne sera pas résolu. J'ai recherché comment le gérer.

C'est le traitement principal.

  1. Désactivez les turbolinks pour chaque balise \
  2. Désactiver (supprimer) turbolinks lui-même
  3. Ne pas appliquer de turbolinks lors du chargement de JS, changer le timing

1. Désactivez les turbolinks pour chaque balise \

Si vous spécifiez {" turbolinks "=> false} dans le lien lui-même Ce lien aura des turbolinks désactivés.

<%= link_to "HOGE", root_path, data: {"turbolinks" => false} %>
<%# => <a data-turbolinks="false" href="/">HOGE</a> %>

Si vous écrivez ceci, vous pouvez définitivement supprimer les turbolinks. Cela semble bien si vous ne contrôlez qu'un script spécifique, mais il semble difficile de tout décrire ...

2. Désactiver (supprimer) turbolinks lui-même

Supprimer la gemme

Supprimer cette ligne

Gemfile


#gem 'turbolinks', '~> 5'

Terminal


$ bundle update

Modifier application.js

app/assets/javascripts/application.js


//= require turbolinks #Supprimer cette ligne

Modifier application.html.erb

`` 'data-turbolinks-track': supprimer'reload'`.

erb:app/views/layouts/application.html.erb


<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>

Il a maintenant été désactivé. Il peut être certain qu'il sera désactivé à moins qu'il ne s'agisse d'un site qui utilise beaucoup JS.

3. N'appliquez pas de turbolinks au chargement JS

Comme ready ʻonload` etc. Avec cette description, les turbolinks peuvent être chargés sans adaptation.

$(document).on('turbolinks:load', function () {
...
});

De plus, vous pouvez modifier le moment de l'application des turbolinks. Si vous souhaitez en savoir plus, cliquez ici. [Prenez d'autres événements du cycle de vie](https://qiita.com/morrr/items/54f4be21032a45fd4fe9#%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E3 % 83% A9% E3% 82% A4% E3% 83% 95% E3% 82% B5% E3% 82% A4% E3% 82% AF% E3% 83% AB% E3% 82% A4% E3% 83 % 99% E3% 83% B3% E3% 83% 88% E3% 82% 92% E3% 81% A8% E3% 82% 8B "Prendre d'autres événements du cycle de vie")

Je pense que c'est la meilleure solution cette fois, car le réglage fin fonctionne pour chaque script.

Résumé

Turbolinks est-il une fonctionnalité intéressante ou une fonctionnalité bruyante ... Je ne peux pas dire non plus pour l'instant lol Je suis sûr qu'il devrait être installé par défaut, mais ... Si vous savez comment l'utiliser plus efficacement, laissez un commentaire!

Recommended Posts

[Rails 5] [Turbolinks] Que faire lorsque JS ne fonctionne pas en raison d'une transition de page ou d'un retour du navigateur
[Rails] Que faire lorsque les rails ne répondent pas ou ne s'arrêtent pas
Que vérifier lorsque rails db: la migration ne réussit pas
Que faire lors du débogage "Source non trouvée"
[Grails] Une erreur s'est produite lors de l'exécution Que faire lorsque la CLI Grails ne démarre pas
Que faire quand est invalide car il ne commence pas par un "-"
Que faire si la mise à jour ne prend pas effet après le déploiement de Rails AWS
Que faire lorsque les paramètres de routage ne fonctionnent pas après la création d'un environnement Docker avec Laravel
Que faire si l'annotation JSON Hint ne fonctionne pas avec Lombok et JSONIC
Bluemix Infrastructure VPN ne se connecte pas car il ne prend pas en charge NPAPI! Que faire quand [Mac]
[Ruby on Rails] Lorsque l'acquisition de l'identifiant du paramètre ne s'est pas bien déroulée
Que faire lorsque la méthode n'est pas trouvée dans f: ajax
Que faire lorsque la "relation" hibernate_sequence "n'existe pas" dans la colonne ID de PostgreSQL + JPA
Que faire si l'application n'est pas créée avec la dernière version de Rails installée lorsque les rails sont neufs
[Rails] Que faire si les données ne sont pas enregistrées dans la base de données
Que faire lorsque les modifications du servlet ne sont pas reflétées
Le ressort doit être suspecté lorsque les commandes Rails ne fonctionnent pas correctement
Que faire si la page Rails n'est pas affichée dans le didacticiel Rails 1.3.2
java.security.InvalidKeyException: Que faire en cas de taille de clé ou de paramètres par défaut illégaux
Que faire lorsqu'une exception javax.batch.operations.JobStartException se produit
Que faire lorsque l'hôte bloqué: "nom d'hôte" apparaît dans Ruby on Rails
Le simulateur ne fonctionne pas: impossible de démarrer le périphérique en raison de ressources système insuffisantes
Que faire lorsque "call'Hoge.connection 'pour établir une connexion" apparaît sur les rails c
[Rails] Que faire lorsque l'image Refile n'est pas affichée lors de l'écriture du traitement au moment de l'erreur de routage
Que faire lorsqu'une exception javax.el.PropertyNotWritableException se produit
[Rails] [Note] Quand ajouter = à <%%> et quand pas
Que faire lorsque la méthode non définie ʻuser_signed_in? '
Que faire si vous obtenez Impossible de localiser le répertoire Gemfile ou .bundle /
Le code écrit en Java-TeraPad à partir du débutant ne fonctionne pas en raison d'une erreur
Que faire si l'installation de ffi échoue lors du lancement d'une application dans Rails
[Ubuntu] Que faire lorsque MongoDB ne peut pas être démarré en raison d'une erreur SocketException
Que faire lorsque «Impossible de trouver» dans l’une des sources apparaît dans l’environnement de développement avec Docker × Rails × RSpec
Que faire si le message d'erreur "Impossible de trouver un moteur d'exécution JavaScript" s'affiche lors du démarrage du serveur rails