2012-09-03 3 views
0

Je suis nouveau sur RoR et le développement d'applications web, Im utilisant Rails 3.2.3 et je veux utiliser un tableau ruby ​​dans Highcharts et j'utilise Haml dans mes fichiers de vue.Appeler un tableau ruby ​​en javascript externe de Haml

J'ai un tableau défini dans le contrôleur comme ceci:

... 
def show 
    ... 
    @close_array = DailyQuote.where(company_id: @company.id).map(&:closing_price) 
end 

et je l'ai déclaré dans mon dossier de vue Haml.

%body 
    - close_array_j = "#{@close_array.inspect}" 
    =javascript_include_tag :build_chart 
    #container{:style => "min-width: 300px; height: 300px; margin: 0 auto"} 

Maintenant, je veux utiliser ce tableau, close_array_j, dans un tableau Highcharts que j'ai écrit le code dans un fichier séparé appelé build_chart.js:

$(function() { 
    var chart; 
    $(document).ready(function() { 
    chart = new Highcharts.Chart({ 
    chart: { 
     renderTo: 'container', 
     }, 
... 
    series: [{ 
     name: 'Closing Price', 
     data: $('#close_array_j') 
    }] 
... 

Le tableau de Highcharts est d'être rendu sans données. Soit dit en passant, je ne sais pas rubis ou haml ou js très bien comme vous pouvez le dire ...

Répondre

3

Vous pouvez imprimer la variable comme celui-ci dans HAML

%script 
    != "close_array_j = #{@close_array.to_json};" 

et ensuite l'utiliser en javascript

L'affectation de variable que vous faites dans votre fichier de vue haml n'a aucun effet.
... 
series: [{ 
    name: 'Closing Price', 
    data: close_array_j 
}] 
... 
+0

c'est exactement ce que je dois, merci Loken! – user1642579

0

Il ne s'applique pas automagiquement dans votre fichier javascript.

Vous pourriez envelopper dans un tag de script. Voici la version erb:

<%= javascript_tag do %> 
close_array_j = = '<%= j @close_array.to_json %>'; 
<% end %> 

Cependant, il existe d'autres techniques plus propres. L'un serait de tirer parti de l'attribut de données HTML5 pour intégrer des données telles que la vôtre. C'est facile d'accès avec Jquery.

Je vous recommande de regarder le screencast de Ryan Bate sur la façon de transmettre des données au javascript de plusieurs façons.

http://railscasts.com/episodes/324-passing-data-to-javascript?view=asciicast

Questions connexes