2014-09-03 1 views
0

Когда я создаю график со следующими параметрами Flot рисует график правильно:функция маркировки флота, оси не определены?

var options = { 
      colors: trendcolors, 
      series: { 
       points: { 
        show: true 
       }, 
       lines: { 
        show: true 
       } 
      }, 
      xaxis: { 
       mode: "time", 
       axisLabel: "Date/Time", 
       tickLength: 0 
      }, 
      yaxis: { 
       axisLabel: "Duration (Sec)" 
      }, 
      selection: { 
       mode: "x" 
      }, 
      grid: { 
       hoverable: true, 
       clickable: true, 
       markings: function (axes) { 
        var markings = []; 
        var date = new Date(axes.xaxis.min); 
        date.setUTCSeconds(0); 
        date.setUTCMinutes(0); 
        date.setUTCHours(0); 
        var i = date.getTime(); 
        do { 
         markings.push({xaxis:{from: i, to: i + (24 * 60 * 60 * 1000) }, color: colormarking }); 
         i += ((24 * 60 * 60 * 1000) * 2); 
        } while (i < axes.xaxis.max); 
        return markings; 
       } 
      }, 
      legend: { 
       labelFormatter: function(label, series) { 
          return label + " (" + series.data.length + ")"; 
         } 
      } 
     }; 

Однако, когда я изменить маркировку анонимной функции к стандартной функции возникает ошибку и Flot не удается нарисовать график, потому что «оси 'не определен в строке fMarkings. Почему это? Что поделаешь?

var options = { 
     colors: trendcolors, 
     series: { 
      points: { 
       show: true 
      }, 
      lines: { 
       show: true 
      } 
     }, 
     xaxis: { 
      mode: "time", 
      axisLabel: "Date/Time", 
      tickLength: 0 
     }, 
     yaxis: { 
      axisLabel: "Duration (Sec)" 
     }, 
     selection: { 
      mode: "x" 
     }, 
     grid: { 
      hoverable: true, 
      clickable: true, 
      markings: fMarkings(axes) 
     }, 
     legend: { 
      labelFormatter: function(label, series) { 
         return label + " (" + series.data.length + ")"; 
        } 
     } 
    }; 

Кстати, fMarkings определяется глобально в другом блоке js.

ответ

1

Аргумент markings ожидает функцию или массив. То, что вы делаете, это , вызывающее функцию, когда вы определяете объект опций. Когда вы вызываете его там, переменная осей не существует. Что вам нужно, это просто:

grid: { 
     hoverable: true, 
     clickable: true, 
     markings: fMarkings 
    }, 

Где fMarkings функция, как:

fMarkings = function(axes){ 
    return arrayOfMarkings 
} 
Смежные вопросы