У меня есть 15-20 высокоскоростных диаграмм на одной странице (с использованием слайдера, 1-2 графика на слайд), некоторые гистограммы, некоторые диаграммы столбцов, некоторые круговые диаграммы с разным дисплеем опции. То, что я использовал, имело несколько методов в моем закрытии, где у меня были методы вроде self.drawColumnChart(xPlotColor, yPlotColor, xPlotLabelSize, yPlotLabelSize, ...10 more arguments)
. Внутри того же объекта у меня есть методы типа drawRevenueChart(), drawLossChart() и т. Д. drawRevenueChart()
вызывал self.drawColumnChart(
с 15 аргументами. Поскольку количество карт выросло, я в конечном итоге проходит все больше и больше аргументов, чтобы self.drawColumnChart(
так что я думал, что я мог бы реорганизовать это путем изменения drawRevenueChart()
вПуть к сокращению/рефактору множественных значений плагина
("$id").highcharts(
{chart: {
plotOptions: {
labelSize: '2em'
},
xAxis:{
labelSize: '1.3em',
formatter: function(){
return '% ' + this.value;
}
...and so on
}
})'
не нужен self.drawColumnChart(xPlotColor, yPlotColor, xPlotLabelSize, yPlotLabelSize, ...10 more arguments)
больше, но я только что прошел, что сложность до drawRevenueChart()
. drawRevenueChart()
имел длину 2 строки, но теперь длина линии составляет 25 строк. То же самое с drawLossChart()
, он имел длину 3 строки, просто вызывая self.drawColumnChart(
, но после рефакторинга он превратился в метод длиной 15 строк.
Можете ли вы, ребята, подумать о том, как я могу реорганизовать/сократить это? Может быть, drawRevenueChart()
называет self.drawChart("column", [plotOptions.labelSize: '2em', xAxis: {labelSize: '1.e em'}...
Это только кажется, что я должен повторять
plotOptions: {
labelSize: '2em'
},
xAxis:{
labelSize: '1.3em',
все мое закрытие для каждой диаграммы с различными опциями. Есть ли способ сократить это? Я уже использую jQuery extend()
для расширения параметров диаграммы по умолчанию с помощью настраиваемых опций. Это все в закрытии. Но независимо от того, как я реорганизую это, я обнаруживаю, что повторяю те же строки с разными вариантами. Любые идеи приветствуются.
Обновление:
В соответствии с просьбой TrueBlueAussie:
он будет использоваться:
myClosure{
var self = this;
self.drawColumnChart = function(selector, xPlotColour, yPlotColour, xAxisName, yAxisName, xPlotOptionsSize....10 more arguments)
{
$(selector).highcharts({
chart: {
type: 'column'
},
xPlot:{
style:{
color: xPlotColour
}
},
yPlot: {
labels: {
style:{
color: yPlotColour
}
}
},
xAxis:{
labels: {
name: xAxisName,
}
}
})
}
drawRevenueChart: function(data){
self.drawColumnChart("#chartid1", 'blue', 'red', 'profit', 'month', '1.2em', null, false, null....);
}
drawLossChart: function(data){
self.drawColumnChart("#chartid2", 'orange', 'yellow, 'loss', 'month', '2em' ...);
}
}
После реорганизовать
drawRevenueChart: function(data){
$("#chartid1").highcharts({
chart: {
type: 'column'
},
xPlot:{
style:{
color: 'blue'
}
},
yPlot: {
labels: {
style:{
color: 'red'
}
}
},
xAxis:{
labels: {
name: 'profit',
}
}
});
}
drawLossChart: function(data){
$("chartid2").highcharts({
xplot:{
style:{
color: 'orange'
}
},
xAxis:{
labels:{
name: 'loss',
color: 'puke'
}
}
}
};
Так что я просто переместил установку уровня 3 уровня с одного метода на другой, без реального выигрыша.
Для чего-то вроде этого (требуется рефакторинг) вам нужно показать полный код, желательно с рабочей демонстрацией. –
@TrueBlueAussie Мне показалось, что я дал достаточно информации на этом сайте, объект, который я использую, составляет около 500 строк, с вызовами ajax, чтобы получить данные диаграммы и все такое, поэтому не уверен, как показать полный код с рабочей демонстрацией. Если вы скажете мне, где неясно, что я делаю, я обновлю вопрос. – artm
Ну в Highcharts вы можете установить глобальные/стандартные параметры для всех диаграмм на одну страницу, как и в демонстрациях, которые называются темами: http://www.highcharts.com/demo/line-basic/dark-unica –