Ich habe ein Highchart, das von einer js.erb
Datei in Verbindung mit der gon
Variable gerendert wird. Das Setup, das ich habe, ist, dass ein Benutzer eine Seite lädt und sobald die Seite fertig ist, wird ein Ajax-Anruf an einen separaten Controller gemacht. Der Controller wird die benötigten Daten verarbeiten, sie dem gon zuweisen und die entsprechende js.erb
Datei mit den Daten rendern. Allerdings beobachte ich, dass gon
konsequent undefiniert ist und die Variablen nicht an gon
gesendet werden. Ich frage mich, ob das mit Ajax zu tun hat, aber hier ist mein Code und Logikfluss.Gon-Variable ist nicht in Js.ERB-Datei mit AJAX definiert
Hier ist, wo der Anruf stammt
_vulnerabilites_per_version.html.haml
%script{:src => "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"}
= Gon::Base.render_data
- vanity_url = project.vanity_url
:javascript
$(document).ready(function() {
$.ajax({
url: "/p/#{vanity_url}/security.js"
});
})
#vulnerabilities{:style => "max-width: 405px; height: 300px; margin: 0 auto"}
Der Anruf geht dann an die Steuerung
class VulnerabilitiesController < ApplicationController
before_action :set_project_or_fail
before_action :set_best_project_security_set
before_action :set_releases
before_action :set_vulnerabilities
def vulnerabilities_per_version
gon.watch.release_versions = @releases.map { |r| r.version }
puts gon.release_versions
end
private
def set_project_or_fail
project_id = params[:project_id] || params[:id]
@project = Project.by_vanity_url_or_id(project_id).take
raise ParamRecordNotFound unless @project
end
def set_best_project_security_set
@best_project_security_set = @project.best_project_security_set
end
def set_releases
@releases = @best_project_security_set.releases.order(released_on: :asc).limit(10)
end
def set_vulnerabilities
@vulnerabilities = Array.new(3) { [] }
@releases.each do |r|
@vulnerabilities[0] << r.vulnerabilities.low.count
@vulnerabilities[1] << r.vulnerabilities.medium.count
@vulnerabilities[2] << r.vulnerabilities.high.count
end
end
end
Wie Sie sehen können, ist die release_versions Variable gon
übergeben wird, und ich kann es sehen in Die Protokolle, dass die Werte, nach denen ich suche, dort sind.
Sobald wir den Controller verlassen, die js.erb
Datei wiedergegeben wird:
vulnerabilites_per_version.js.erb
alert(gon.watch.release_versions)
$(function() {
$('#vulnerabilities').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Vulnerabilities per Version',
align: 'left',
style: {
color: '#336699',
fontSize: 16
}
},
legend: {
align: 'left',
itemWidth: 127
},
xAxis: {
categories: gon.release_versions
},
yAxis: {
min: 0,
title: {
text: 'Vulnerabilities'
},
.........code.....
Was die Ursache für dieses Problem sein könnte? Warum kann ich nicht auf die Daten in meiner js.erb
Datei zugreifen? Laut der gon
Dokumentation sollte alles in Ordnung sein, damit die Daten gerendert werden, aber nicht. Als zweiten Versuch ging ich auch weiter auf die Verwendung, aber wieder kein Glück. Irgendwelche Ideen? Hilfe in der Sache würde sehr geschätzt werden.
Ist in der Konsole verfügbar gegangen? Wenn Sie "gon" überprüfen und eingeben, existiert dieses Objekt? Wenn es existiert, ist es die Eigenschaft, die Sie hinzugefügt haben, die das nicht tut? – steel