2 votes

Dojo + Rails 3.2.8 + CoffeeScript

J'essaie d'utiliser Dojo Toolkit 1.8 au lieu de JQuery dans une application web Rails 3.2.8, principalement en raison de l'absence d'un widget complet et visuellement uniforme basé sur JQuery. J'ai suivi les étapes suivantes :

  • Décompressez les répertoires dojo, dijit et dojox dans app/assets/javascripts.
  • Modifié dans application.js //= require_tree . a //= require_directory .
  • Modification de la mise en page de l'application (pas encore discrète... juste pour l'effet de test)

vues/layouts/application.html.erb

<!DOCTYPE html>
<html>
<head>
  <title>Dojo</title>
  <%= stylesheet_link_tag 'application' %>
  <%= javascript_include_tag 'application' %>
  <%= stylesheet_link_tag '/assets/dijit/themes/claro/claro.css' %>
  <%= javascript_include_tag "dojo/dojo", :'data-dojo-config' => 'async: true' %>
  <%= csrf_meta_tags %>
</head>
<body class='claro'>
  <%= yield %>
  <script>
    require(["dojo/parser", "dojo/ready"], function(parser, ready) {
      ready(function() {
        parser.parse();
      });
    });
  </script>
</body>
</html>
  • Création d'un contrôleur nommé home et d'un modèle pour l'action index.

vues/home/index.html.erb

<input type="text" required="true" name="bday" id="bday" data-dojo-type="dijit/form/DateTextBox" value=<%= localize(Date.today - 21.days) %> />
<button id="button1" type="button" data-dojo-type="dijit/form/Button">Button 1</button>

Ok, Dijit fonctionne bien ! Mais quand j'essaye de mettre du code dojo dans un fichier CoffeeScript (assets/javascripts/home.js.coffee), un "ReferenceError : require n'est pas défini" Le message d'erreur est affiché sur la console Firebug. Exemple de code :

require ["dojo/domReady!"], () ->
  alert('ok')

Si je mets un //= require dojo/dojo avant le code ci-dessus, il s'exécute, mais tous les modules dojo sont chargés (pas seulement domReady) et une "Error : defineAlreadyDefined" est affichée sur Firebug.

Y a-t-il un moyen d'appeler la fonction require sans avoir à recharger tout le dojo.js ou même accéder à une variable globale dojo ?

Merci

2voto

Reginaldo Silva Points 41

C'est une erreur de ma part, j'ai interverti l'ordre d'inclusion des javascripts. Le bon ordre est :

  <%= stylesheet_link_tag '/assets/dijit/themes/claro/claro.css' %>
  <%= javascript_include_tag "dojo/dojo", :'data-dojo-config' => 'async: true' %>
  <%= stylesheet_link_tag 'application' %>
  <%= javascript_include_tag 'application' %>

Dojo n'était pas encore chargé lorsque j'ai essayé de demander des modules dans le fichier coffeescript.

Merci de votre attention.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X