我試圖讓我的AMChart純粹的javascript出於我的視圖,並進入assets/javascripts/.js文件中,因爲Rails喜歡它。Rails:限制資產管道中的純javascript到特定視圖
我在兩個獨立的視圖上有兩個獨立的圖表,每個視圖都有不同的配置和數據源。
我的問題是,當訪問一個視圖時,我得到一個javascript錯誤,說包含圖表數據的變量包含其他視圖'未定義' - 此錯誤下面的所有javascript都將被中止。
的AMChart JavaScript是隻是純JavaScript(無jQuery的),看起來像這樣在我的控制器的.js文件的兩個圖表:
/// Radar Chart for First View
var chart;
AmCharts.ready(function() {
// RADAR CHART
chart = new AmCharts.AmRadarChart();
chart.dataProvider = chartData_radar1; // <- data variable
chart.categoryField = "criteria";
chart.startDuration = 1;
chart.startEffect = ">";
chart.sequencedAnimation = true;
// VALUE AXIS
var valueAxis = new AmCharts.ValueAxis();
valueAxis.gridType = "circles";
valueAxis.fillAlpha = 0.02;
valueAxis.fillColor = "#000000"
valueAxis.axisAlpha = 0.1;
valueAxis.gridAlpha = 0.1;
valueAxis.fontWeight = "bold"
valueAxis.minimum = 0;
valueAxis.maximum = 10;
chart.addValueAxis(valueAxis);
// GRAPH
var graph = new AmCharts.AmGraph();
graph.lineColor = "#98cdff"
graph.fillAlphas = 0.4;
graph.bullet = "round"
graph.valueField = "score"
graph.balloonText = "[[category]]: [[value]]/10"
chart.addGraph(graph);
// Balloon Settings
var balloon = chart.balloon;
balloon.adjustBorderColor = true;
balloon.color = "#000000";
balloon.cornerRadius = 5;
balloon.fillColor = "#000000";
balloon.fillAlpha = 0.7
balloon.color = "#FFFFFF"
// WRITE
chart.write("chartdiv");
});
/// Radar Chart for Second View
var chart;
// Draw AM Radar Chart
AmCharts.ready(function() {
// RADAR CHART
chart = new AmCharts.AmRadarChart();
chart.dataProvider = chartData_radar2; // <- data variable
chart.categoryField = "criteria";
chart.startDuration = 0.3;
chart.startEffect = ">";
chart.sequencedAnimation = true;
// GRAPH - FIRST 5
var graph = new AmCharts.AmGraph();
graph.title = "First 5";
graph.lineColor = "#bdd523"
graph.fillAlphas = 0.2;
graph.bullet = "round"
graph.valueField = "first5"
graph.balloonText = "[[category]]: [[value]]/10"
chart.addGraph(graph);
// GRAPH - LAST 5
var graph = new AmCharts.AmGraph();
graph.title = "Last 5";
graph.lineColor = "#98cdff"
graph.fillAlphas = 0.2;
graph.bullet = "round"
graph.valueField = "last5"
graph.balloonText = "[[category]]: [[value]]/10"
chart.addGraph(graph);
// VALUE AXIS
var valueAxis = new AmCharts.ValueAxis();
valueAxis.gridType = "circles";
valueAxis.fillAlpha = 0.02;
valueAxis.fillColor = "#000000"
valueAxis.axisAlpha = 0.1;
valueAxis.gridAlpha = 0.1;
valueAxis.fontWeight = "bold"
valueAxis.minimum = 0;
valueAxis.maximum = 10;
chart.addValueAxis(valueAxis);
// Balloon Settings
var balloon = chart.balloon;
balloon.adjustBorderColor = true;
balloon.color = "#000000";
balloon.cornerRadius = 5;
balloon.fillColor = "#000000";
balloon.fillAlpha = 0.7
balloon.color = "#FFFFFF"
// Legend Settings
var legend = new AmCharts.AmLegend();
legend.position = "bottom";
legend.align = "center";
legend.markerType = "square";
legend.rollOverGraphAlpha = 0;
legend.horizontalGap = 5;
legend.valueWidth = 5;
legend.switchable = false;
chart.addLegend(legend);
// WRITE
chart.write("chart_radar");
});
(因爲缺乏從獲取數據的更好的方法,我型號爲JS方法我定義「chartData_radar1」或「chartData_radar2」(被稱爲例如,在上述7號線)中的觀點,如)
:javascript
var chartData_radar1 = #{Case.chart_analysis_radar(current_user)};
我沒有那麼多尋找黑客/變通方法來得到這個工作,但更多的是要知道什麼是Rails的方式來處理像JavaScript一樣的純JavaScript他在資產管道中?有沒有一種很好的方式來根據視圖只加載一個雷達的JavaScript,而不必將其放入視圖本身?我知道如果你使用JQuery選擇器,你可以選擇性地加載JavaScript的部分,我可以以某種方式把這些全部包裝在jQuery選擇器中?
任何幫助將不勝感激!
好問題。當我放置在單獨的.js文件中時,我也努力使amcharts工作。迄今爲止,我只是將它作爲解決方法保留在視圖中。希望有人能夠對此有所瞭解。 – diasks2
感謝您的投票 - 很高興聽到其他人處於相同的位置。當然,在沒有把js放入視圖中的情況下,必須有一個很好的方法來實現這一點。 – christian
diasks2 - 似乎這個問題沒有抓住任何人。我一直在想,我這裏的問題主要是由於我的非常規方法從rails獲取數據到javascript,在視圖中定義變量的結果。有人曾經建議我這樣做的正確方法是使用Ajax,即jquery $ .get ...如果這是針對AmCharts的所有變量完成的,那麼我不會得到這些無效的'未定義錯誤'。 .. – christian