57 votes

Méthodes Ruby dans Javascript dans HAML

J'ai un script jQuery qui ajoute un nouveau champ à un formulaire, et ce champ contient des informations dynamiques provenant d'un tableau. Le problème est que je ne sais pas comment ajouter un tableau.each pour renseigner les options du champ de sélection dans le javascript sans casser l'indentation HAML et provoquer des erreurs.

Voici ma meilleure tentative qui ne fonctionne pas:

 %script(type="text/javascript")  
  $('#mylink').click(function() {  
  $('#mylink').after('<select>  
  - myarray.each do |options|  
     <option value="#{options.id}">#{options.name}</option>  
  </select>);  
  )};
 

Aussi essayé avec le: filtre javascript sans chance.

103voto

Alex Wayne Points 58113

Généralement, si quelque chose est une douleur dans haml, cela signifie que vous devriez refactoriser le le moment difficile d'aide ou partielle et l'appeler.

// some_helper.rb
def new_snazzy_select_tag(options = [])
  select_tag 'tag_name_here', options.map { |option| [option.id, option.name] }
end

Aussi, vous devez utiliser l' :javascript filtre de rendu javascript car il va le mettre dans une balise script pour vous et pour permettre à l'indentation.

Enfin, vous pouvez utiliser #{ruby_expression} n'importe où dans haml, y compris :javascript filtres, ce qui est très pratique lorsque vous en avez besoin à la sortie de la suite de ruby expressions à des endroits qui ne sont pas directement le contenu des éléments html.

// some_view.html.haml
:javascript
  $('#mylink').click(function() {  
    $('#mylink').after("#{escape_javascript new_snazzy_select_tag(myarray)}");
  };

8voto

ehsanul Points 3103

Essayez ceci, cela devrait fonctionner (je n'ai fait que supprimer un seul espace dans la cinquième ligne et ajouter le cours de clôture sur la sixième):

%script(type="text/javascript")
  $('#mylink').click(function() {
  $('#mylink').after('<select>
  - @myarray.each do |options|
    <option value="#{options.id}">#{options.name}</option>
  </select>');
  )};

Cependant, en supposant que vous êtes en cours d'exécution avec un script ruby ou le cadre de toutes sortes, pourquoi ne pas simplement le faire à l'extérieur du modèle? Ce serait sans doute plus approprié. Dans les rails/sinatra et d'autres cadres de travail, vous pourriez utiliser une méthode d'aide pour ce faire. Si vous regardez le haml de référence, en fait, ils en décourager l'usage de l' - pour évaluer ruby.

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