2016-08-31 3 views
0

У меня есть диаграмма высокого качества, которая отображается файлом 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, но опять же не повезло. Есть идеи? Помощь по этому вопросу будет очень признательна.

+0

ушел доступны в консоли? Когда вы проверяете и вводите 'gon', существует ли этот объект? Если он существует, это свойство, которое вы добавили к нему, а это нет? – steel

ответ

0

Я не уверен, что gon здесь, но если вы объявите gon в качестве переменной экземпляра (@gon), это должно сделать трюк.

Контроллер

def show 
    @dog = Dog.first 
    cat = Cat.first 
end 

Вид: show.html.erb

@dog.name => "Sparky" 
cat.name => undefined method 'name' for nil class 
0

Я подозреваю, что ваш файл js.erb не обновляет глобальную переменную gon.

Попробуйте установить глобальную переменную угольник в шаблоне:

#vulnerabilites_per_version.js.erb 
gon = #{gon} 
console.log(gon.watch.release_versions) 
Смежные вопросы