У меня есть диаграмма высокого качества, которая отображается файлом js.erb
вместе с переменной gon
. Установки, которые у меня есть, это то, что пользователь будет загружать страницу, и как только страница будет готова, аакс-вызов будет сделан для отдельного контроллера. Контроллер будет обрабатывать необходимые данные, назначить его на gon и отобразит соответствующий файл js.erb
с данными. Тем не менее, я продолжаю наблюдать, что gon
неизменно неопределен и переменные не отправляются на gon
. Интересно, связано ли это с ajax, но вот мой код и логический поток.Переменная Gon не определена в файле js.erb с помощью ajax
Вот где вызов происходит
_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"}
вызов идет затем к контроллеру
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
Как вы можете видеть, переменная release_versions в настоящее время передается gon
и я могу просмотреть его в журналы, которые ищут значения, которые я ищу.
После того, как мы покинем контроллер, файл js.erb
визуализируется:
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.....
Что может быть причиной этой проблемы? Почему я не могу получить доступ к данным в моем файле js.erb
? Согласно документации gon
, у меня должно быть все настроенное для отображения данных, но это не так. В качестве второй попытки я также начал читать об использовании gon.watch
, но опять же не повезло. Есть идеи? Помощь по этому вопросу будет очень признательна.
ушел доступны в консоли? Когда вы проверяете и вводите 'gon', существует ли этот объект? Если он существует, это свойство, которое вы добавили к нему, а это нет? – steel