У меня есть три файла .js, которые должны отображать линейные диаграммы d3 в представлении в определенном порядке.
Вопрос: как получить файл .js, чтобы он не перезаписывал другой, когда оба должны отображать графики в одном и том же виде?
Они раздельные, потому что они используют разные данные.
Файлы 'a' и 'b' должны отображать графики, если 'a' находит данные с помощью вызова ajax. Если нет, файл 'c' должен отобразиться.
Они будут работать независимо! Но когда все файлы присутствуют, они либо не загружаются, либо один загружается три раза: /
Основной вид:
<% elsif !@a.empty? %>
<%= render 'a/graphs' %>
<%= render 'b/graphs' unless b.empty? %>
<% else %>
<%= render 'c/graphs' %>
<% end %>
Форма помощников:
а / графики "
<div class="row">
<div class="col-md-12">
<div class="table-responsive">
<div id="flow_plot" class="plot"> </div>
</div>
<div class="table-responsive">
<div id="ph_plot" class="plot"> </div>
</div>
<div class="table-responsive">
<div id="turbidity_plot" class="plot"> </div>
</div>
</div>
б / графики "
<div class="row">
<div class="col-md-12">
<div class="table-responsive">
<div id="zinc_plot" class="plot"> </div>
</div>
<div class="table-responsive">
<div id="copper_plot" class="plot"> </div>
</div>
</div>
с / графы '
<div class="row">
<div class="col-md-12">
<div class="table-responsive">
<div id="temperature_plot" class="plot"> </div>
</div>
<div class="table-responsive">
<div id="velocity_plot" class="plot"> </div>
</div>
<div class="table-responsive">
<div id="depth_plot" class="plot"> </div>
</div>
</div>
Когда это работает, получается правильный помощник по форме, он не получает правильный файл .js. Он получит их все, вызывая всевозможные проблемы, включая проблемы с разбором.
У меня они есть в каждом из моих файлов Js (идентификатор сюжета - это первый svg на каждой странице, где loadData - это то, где находятся ajax и d3):
$(document).ready(function(){
if($("#" + "zinc_plot").length == 1) {
loadData();
}
});
Это не совсем работает. Произойдет следующее: файл «а» будет правильно отображать все свои диаграммы, но затем будет отображать их еще 2 раза (1 раз для каждого дополнительного файла js), но без правильного форматирования времени и строк.
Итак, в моем файле .js я хочу сказать, что он загружает данные только в случае необходимости. Будет ли изменение вышеуказанного условия моей лучшей ставкой? Дайте мне знать, если я смогу предоставить больше информации, большое спасибо!
Дополнительная информация:
Это файл 'a.js'
// ajax call to fetch json
var loadData = function() {
var path = window.location.pathname.split('/');
var site_id = path[path.length - 1];
$.ajax({
type: 'GET',
contentType: 'application/json; charset=utf-8',
url: '/a.json?site_id=' + site_id + '&graphable=true',
dataType: 'json',
success: function(data) {
console.log(data)
var alldata = [];
var parseTime = d3.timeParse("%Y-%m-%dT%H:%M:%S.%LZ");
data.forEach(function(data) {
//this algorithm just sorts it into a nested array for graphing purposes
var eachmp = []
for (var idx = 0; idx < data.scute_reports.length; idx++) {
var thisobject = {}
thisobject.name = data.name
thisobject.inspected_at = parseTime(data.scute_reports[idx].inspected_at)
thisobject.zinc_data = data.scute_reports[idx].zinc
thisobject.copper_data = data.scute_reports[idx].copper
eachmp.push(thisobject)
}
alldata.push(eachmp)
});
console.log(alldata)
formatAllThree(alldata)
},
failure: function(result) {
error();
console.log("fail")
}
});
};
function error() {
console.log("Something went wrong!");
}
function formatAllThree(data) {
drawLinePlot_flow(data);
drawLinePlot_ph(data);
drawLinePlot_turbidity(data);
function drawLinePlot_flow(data) {
var svg = d3.select("#flow_plot").append("svg")
//d3 code
}
function drawLinePlot_ph(data) {
var svg = d3.select("#ph_plot").append("svg")
//d3 code
}
function drawLinePlot_turbidity(data) {
var svg = d3.select("#turbidity_plot").append("svg")
//d3 code
}
}
// fetch data on page load
$(document).ready(function() {
if ($("#" + "flow_plot").length == 1) {
loadData();
}
});
Это файл 'b'
// ajax call to fetch json
var loadData = function() {
var path = window.location.pathname.split('/');
var site_id = path[path.length - 1];
$.ajax({
type: 'GET',
contentType: 'application/json; charset=utf-8',
url: '/lab_forms.json?site_id=' + site_id + '&graphable=true',
dataType: 'json',
success: function(data) {
console.log(data)
var alldata = [];
var parseTime = d3.timeParse("%Y-%m-%dT%H:%M:%S.%LZ");
data.forEach(function(data) {
//this algorithm just sorts it into a nested array for graphing purposes
var eachmp = []
for (var idx = 0; idx < data.scute_reports.length; idx++) {
var thisobject = {}
thisobject.name = data.name
thisobject.inspected_at = parseTime(data.scute_reports[idx].inspected_at)
thisobject.zinc_data = data.scute_reports[idx].zinc
thisobject.copper_data = data.scute_reports[idx].copper
eachmp.push(thisobject)
}
alldata.push(eachmp)
});
console.log(alldata)
formatAllThree(alldata)
},
failure: function(result) {
error();
console.log("fail")
}
});
};
function error() {
console.log("Something went wrong!");
}
function formatAllThree(data) {
drawLinePlot_zinc(data);
drawLinePlot_copper(data);
function drawLinePlot_Zinc(data) {
var svg = d3.select("#zinc_plot").append("svg")
//d3 code
}
function drawLinePlot_Copper(data) {
var svg = d3.select("#copper_plot").append("svg")
//each js file calls different id's
//d3 code
}
}
// fetch data on page load
$(document).ready(function() {
if ($("#" + "zinc_plot").length == 1) {
loadData();
}
});
Это файл 'c'
// ajax call to fetch json
var loadData = function() {
var path = window.location.pathname.split('/');
var site_id = path[path.length - 1];
$.ajax({
type: 'GET',
contentType: 'application/json; charset=utf-8',
url: '/lab_forms.json?site_id=' + site_id + '&graphable=true',
dataType: 'json',
success: function(data) {
console.log(data)
var alldata = [];
var parseTime = d3.timeParse("%Y-%m-%dT%H:%M:%S.%LZ");
data.forEach(function(data) {
//this algorithm just sorts it into a nested array for graphing purposes
var eachmp = []
for (var idx = 0; idx < data.scute_reports.length; idx++) {
var thisobject = {}
thisobject.name = data.name
thisobject.inspected_at = parseTime(data.scute_reports[idx].inspected_at)
thisobject.zinc_data = data.scute_reports[idx].zinc
thisobject.copper_data = data.scute_reports[idx].copper
eachmp.push(thisobject)
}
alldata.push(eachmp)
});
console.log(alldata)
formatAllThree(alldata)
},
failure: function(result) {
error();
console.log("fail")
}
});
};
function error() {
console.log("Something went wrong!");
}
function formatAllThree(data) {
drawLinePlot_temp(data);
drawLinePlot_velocity(data);
drawLinePlot_depth(data);
function drawLinePlot_temp(data) {
var svg = d3.select("#temperature_plot").append("svg")
//d3 code
}
function drawLinePlot_velocity(data) {
var svg = d3.select("#velocity_plot").append("svg")
//each js file calls different id's
//d3 code
}
function drawLinePlot_depth(data) {
var svg = d3.select("#depth_plot").append("svg")
//each js file calls different id's
//d3 code
}
}
// fetch data on page load
$(document).ready(function() {
if ($("#" + "temperature_plot").length == 1) {
loadData();
}
});