[RUBY] Turbolinks: je veux résoudre le problème que JS ne s'affiche pas correctement à moins d'être rechargé lors de la transition avec link_to

table des matières

  1. Introduction
  2. [Qu'est-ce qui interfère avec l'affichage de JS ...](Ce qui interfère avec l'affichage de #js)
  3. [Qui sont Turbolinks? ](Qui est #turbolinks)
  4. Solution
  5. Enfin

introduction

Créer actuellement un portfolio En cela, j'ai implémenté une fonction de calendrier en utilisant JavaScript,

** Lors de la transition de link_to à la page de calendrier Un problème est survenu en raison du fait que JavaScript n’était pas appliqué à moins qu’il n’ait été rechargé une fois **, alors

J'écris cet article dans le but de clarifier la cause de ce domaine et de garder une trace. Veuillez noter que cet article a été rédigé par un débutant en programmation.

Ce qui interfère avec l'affichage JS, c'est ...

Dans l'ensemble, ** Turbolinks **. À cause de ce type, le JS que j'ai écrit dur n'est pas affiché à la destination de transition.

En pensant de cette façon, cela semble être un gars haineux, Quand j'ai fait des recherches sur diverses choses, il semble que c'est en fait un bon gars.

C'est un bon gars, mais parfois avec une aide supplémentaire, Il semble que nous cachions par inadvertance notre JS important et important.

Turbolinks, peut-être que vous ne pouvez pas le détester. Cela m'a donné envie d'en savoir plus (de force).

C'est pourquoi je vais regarder de plus près.

Qui sont Turbolinks?

Turbolinks est une bibliothèque qui ajax automatiquement les transitions de page en réponse aux clics sur les liens.

① Cliquez sur une balise pour obtenir la page de destination de la transition avec Ajax

(2) Si le CSS ou JS requis par la page acquise est le même que celui de la page en cours, ne remplacez que le titre ou le corps (seulement une partie de l'écran).

C'est le mécanisme principal de Turbolinks.

Avantages de l'introduction de Turbolinks

Le plus grand avantage de l'introduction de Turbolinks est qu'il ** accélère l'affichage à l'écran **.

Normalement, cliquer sur un lien vous amènera à la page spécifiée, ce qui prendra un certain temps, mais si vous avez installé Turbolinks, la page ne sera pas modifiée et Ajax utilisera Ajax sur une partie de l'écran. Comme il s'agit d'un mécanisme à mettre à jour uniquement **, le chargement ne prend donc pas de temps et l'affichage de la page s'accélère.

Du point de vue du site, je souhaite éliminer au maximum le temps d'attente. Turbolinks se sent comme un sauveur pour améliorer l'UX.

Quel bon gars: rire: Le fait qu'il ait été introduit dès le début est qu'il est pratique et utilisable tel quel.

Cela dit, peu importe à quel point un gars est bon, cela peut parfois être ennuyeux et dans certains cas.

Inconvénients de l'introduction de Turbolinks

L'inconvénient de l'introduction de Turbolinks est qu'il peut interférer avec l'affichage correct de JS et CSS **.

En termes d'avantages, j'ai expliqué que Turbolinks ne met à jour qu'une partie de l'écran, On peut dire que ce mécanisme pose le problème que JavaScript ne reflète pas bien. Dans ce qui précède, j'ai mentionné que si vous utilisez Turbolinks, ** la transition de page ne sera pas effectuée et seule une partie de l'écran sera mise à jour par Ajax **.

** Comme la transition de page du navigateur n'a pas été effectuée, l'événement JavaScript ne se déclenche pas **, et par conséquent, le JavaScript ne reflète pas bien.

Ceci est la section supplémentaire de Turbolinks. Je vois.

Solution

Présentation de Turbolinks, désactivation si nécessaire, Je veux refléter en quelque sorte le comportement de JavaScript.

Apparemment, il existe deux solutions pour ces personnes.

① Ajout d'événements fournis par Turbolinks

Faites fonctionner JS correctement en ajoutant l'événement spécifique à Turbolinks `` turbolinks: load '' au fichier JS.

test.js


document.addEventListner('turbolinks:load', function() {
  console.log('Loaded');
});

② Désactivez les Turbolinks sur un lien spécifique

En ajoutant data: {"turbolinks" => false} à la balise a (link_to) JS fonctionne normalement en désactivant Turbolinks et en le faisant sauter vers la destination de la transition.

test.html.slim


=link_to "tester", tests_path, data: {"turbolinks" => false}

finalement

Je me suis penché sur Turbolinks lorsque j'ai créé le portfolio. Plus je levais les yeux, plus je me sentais profondément. Cette fois, je vais garder les bases, mais si j'ai une autre chance, j'aimerais enquêter.

Si vous trouvez des erreurs ou des omissions dans le contenu de cet article, nous vous serions reconnaissants de bien vouloir nous le faire savoir.

Référence: Rails Guide Turbolinks Operating Principle [Guide de formation rapide Ruby on Rails p.340-p.344](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD % BF% E3% 81% 88% E3% 82% 8B-Ruby-Rails-5% E9% 80% 9F% E7% BF% 92% E5% AE% 9F% E8% B7% B5% E3% 82% AC % E3% 82% A4% E3% 83% 89-% E5% A4% A7% E5% A0% B4% E5% AF% A7% E5% AD% 90 / dp / 4839962227 / ref = sr_1_1? __Mk_ja_JP =% E3 % 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & crid = 2RTWZ5N8BXF8J & dchild = 1 & keywords = rails +% E5% AE% 9F% E8% B7% B5% E3% 82% AC% E3% 82 % A4% E3% 83% 89 & qid = 1600782175 & sprefix = rails +% E5% AE% 9F% E8% B7% B5% 2Caps% 2C249 & sr = 8-1)

Recommended Posts

Turbolinks: je veux résoudre le problème que JS ne s'affiche pas correctement à moins d'être rechargé lors de la transition avec link_to
[Rails] Je souhaite ajouter des données aux paramètres lors de la transition avec link_to
Comment résoudre le problème que l'image du site Web ne s'affiche pas après le déploiement sur heroku dans Rails 5
Comment résoudre le problème que le bean n'est pas traité correctement lorsqu'il est imbriqué dans Spring Batch
J'ai rencontré un problème selon lequel JS n'est pas lu après la transition de page et JS est lu lorsqu'il est chargé.
Comment résoudre le problème lorsque la valeur n'est pas envoyée lorsque le formulaire est désactivé dans les rails et envoyé
J'ai essayé de résoudre le problème de la "sélection multi-étapes" avec Ruby
Je veux résoudre le problème N + 1 où les données sont plus rassemblées et l'opération devient lente.
À propos du problème selon lequel l'image n'est pas affichée après le déploiement AWS
Comment résoudre le problème de non-sortie du journal de connexion lorsque l'application Web est arrêtée
[WSL] Solution pour le phénomène que 404 est affiché lors de la tentative d'insertion de Java avec apt (mémo personnel)
[Rails] Comment résoudre le problème d'écrasement de l'image par défaut lors de l'édition sans télécharger l'image [Active Storage]
J'ai essayé de résoudre le problème de la séquence Tribonacci en Ruby, avec récurrence.
[Pour les débutants] Lorsque vous voulez dire que l'option JVM (-D) ne fonctionne pas avec la commande java -jar, ou que la bibliothèque est boguée.
Le message d'erreur du périphérique ne s'affiche pas correctement.
Lorsque le projet n'est pas affiché dans eclipse
Même en Java, je veux sortir vrai avec un == 1 && a == 2 && a == 3 (magie grise qui n'est pas tant que magie noire)
[Android Studio] À propos du fait que la vue de conception n'est pas affichée lors de l'utilisation de TextClock
Un avertissement s'affiche lorsque vous essayez d'utiliser un entier énorme avec les variables spéciales $ 1, $ 2, $ 3 ...
Je souhaite utiliser le mode sombre avec l'application SWT
J'ai essayé de résoudre le problème de la boisson bonus Ruby (il y a un exemple de réponse)
[Rails] Que faire lorsque la vue se réduit lorsqu'un message est affiché avec la méthode des erreurs
Je veux passer la commande de démarrage à postgres avec docker-compose.
Quand j'ai essayé d'utiliser le kit AWS SDK avec Ruby + Lambda, `sam local` était en panne.
J'ai essayé de résoudre le problème de création de carte de bingo Ruby (il y a un exemple de réponse)
Je veux rendre le cadre de la zone de texte rouge lorsqu'il y a une erreur de saisie
Que faire si l'application n'est pas créée avec la dernière version de Rails installée lorsque les rails sont neufs
Que faire lorsque javax.el.ELException: Pas une expression de méthode valide: s'affiche lorsque l'écran JSF est affiché