2017-10-14 19 views
0

Je sais que cela a été répondu ici: Javascript Include Tag Best Practice in a Rails Application, mais je ne comprends pas quelque chose.Rails include js dans la vue spécifique

Comment spécifier le fichier js dans le tag: defaults? J'ai essayé de spécifier le chemin vers js au lieu d'utiliser tag.

En application.html.erb:

<head> 
    <title>...</title> 
    <%= csrf_meta_tags %> 

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 
    <%= yield :head %> 
</head> 

Vu:

<% content_for :head, javascript_include_tag('qEditor/http_cdn.quilljs.com_1.3.2_quill') %> 

Ce fichier est dans le app/assets/javascripts/qEditor et selon IDE le chemin est correct. J'ai changé le fichier application.js de //= require_tree . à //= require_directory . afin que le fichier js ne soit pas chargé ailleurs. Cela ne fonctionne pas ...

Pouvez-vous m'aider à résoudre ce problème? Je suis vraiment nouveau dans les rails. Merci

MISE À JOUR

application.html.erb:

<!DOCTYPE html> 
<html> 
<head> 
    <title>....</title> 
    <%= csrf_meta_tags %> 
    <%= content_for :assets do %> 
    <%end%> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 
</head> 

<body> 

<div class="container"> 
    <%= link_to 'Home', root_path, class: 'btn btn-default' %> 
    <button onclick="toggleTodos()" class="btn btn-default">Toggle TODO's</button> 

    <% flash.each do |key, value| %> 
     <div class="alert alert-<%= key %>"><%= value %></div> 
    <% end %> 


    <div class="jumbotron"> 
    <%= yield %> 
    </div> 

</div> 

</body> 
</html> 
+0

Vous pouvez remplacer le fichier js pour le charger manuellement, puis l'ajouter à votre fichier assets.rb dans le fichier 'Rails.application.config.assets.precompile' et enfin l'ajouter dans votre affichage en utilisant un' javascript_include_tag' . –

+0

Stubbing n'est pas nécessaire si vous placez le fichier dans 'vendeur/assets' où vous devriez placer le contenu du vendeur de toute façon @ SebastiánPalma – max

+0

Je vois maintenant, merci pour le conseil @max. –

Répondre

2

Le bon endroit pour le contenu des fournisseurs (de tout ce qui est un projet non pas par vous spécifique ou l'auteur) est en /vendor/assets/javascripts. Cela contourne également votre problème puisque vendor/assets n'est pas requis par //= require_tree ..

Alors déplacez-le sur /vendor/assets/javascripts/http_cdn.quilljs.com_1.3.2_quill.js.

/vendor/assets est sur les chemins de recherche d'actifs par défaut de Sprockets.

<head> 
    <title>...</title> 
    <%= csrf_meta_tags %> 
    <%= content_for :assets do %> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 
    <% end %> 
</head> 

Depuis content_for concatène vous pouvez simplement ajouter un content_for(:assets) pour ajouter du contenu supplémentaire:

<% content_for :assets do > 
    <%= javascript_include_tag('http_cdn.quilljs.com_1.3.2_quill') %> 
<% end %> 

Cela vous permet également d'utiliser provide ou concat: false si vous souhaitez remplacer le bloc fourni par la mise en page.

+0

Je pensais que ça marchait, mais ce n'est pas ... désolé. Pourriez-vous vérifier mon application.html.erb si c'est correct? – Wlad

+0

"Ça ne marche pas" est l'information la plus inutile au monde. Qu'est-ce qui ne fonctionne pas précisément? Vous devez déboguer votre application vous-même. – max

+0

Ce qui ne fonctionne pas, c'est que le fichier js n'est pas chargé dans la vue. Je suppose que je ne comprends pas vraiment comment je devrais incoporer "<% = content_for: assets do%>" dans application.html.erb car les autres parties sont assez claires. – Wlad