2009-08-07 5 views
1

J'ai une partie javascript à mon avis, que je veux modifier à travers les locaux que j'ai définis dans une aide.Comment puis-je rendre le code Ruby en javascript?

<script type="text/javascript"> 
var store = new Ext.data.JsonStore({ 
    url: '/admin/administration/users/grid_data.json', 
    root: 'users', 
    fields: [ 
    <%- for field in fields do -%> 
     {name: '<%= field[:data_index] -%>'}, 
    <%- end -%> 
    ] 
}); 
</script> 

Cela ne fonctionne pas, pouvez-vous m'aider?

Répondre

1

Le problème est que vous allez avoir une virgule de fin. Vous devez vérifier la longueur de votre tableau de champs et s'il s'agit du dernier élément, n'indiquez simplement pas la virgule que vous avez actuellement à la fin de chaque paramètre de nom.

0

La première chose à faire est de regarder le code généré à partir de la source de la page. Des erreurs de syntaxe là-bas? La bibliothèque Ext est-elle incluse quelque part dans la section head du HTML?

0

Qu'en est-:

<%= (fields.collect {|field| "{name: #{field[:data_index]}}"}).join(',') %> 
4

Ce script ne fonctionnera pas dans IE becuase de c'est strict analyseur Javascript. La boucle for dans votre code laisse une fin , à la fin du tableau. Ce n'est pas une syntaxe Javascript valide. La meilleure façon de déplacer les données de rubis en javascript est presque toujours to_json:

<% javascript_tag do %> 
var store = new Ext.data.JsonStore({ 
    url: '/admin/administration/users/grid_data.json', 
    root: 'users', 
    fields: <%= fields.collect{|f| { :name => f[:data_index] } }.to_json %> 
}); 
<% end %> 

Et vous pouvez laisser le .collect{|f| { :name => f[:data_index] } } si vous utilisez la même clé de hachage en Ruby et Javascript. Beaucoup plus agréable, et beaucoup moins sujet aux bugs.

Bonne chance!

Questions connexes