2015-08-05 8 views
1

Я пытаюсь создать таблицу с помощью CanvasJS, но я получаю следующее сообщение об ошибке:canvasjs делают это не функция

Uncaught TypeError: b[a].render is not a function 
    w.render @ canvasjs.min.js:84 
    Aa.Chart.render @ canvasjs.min.js:412 
    window.onload @ statistics:107 

код является примером кода найти на их сайте:

<!DOCTYPE HTML> 
<html> 
<head> 
<script type="text/javascript"> 
window.onload = function() { 
    var chart = new CanvasJS.Chart("chartContainer", 
    { 
     title:{ 
      text: "Number of Students in Each Room" 
     }, 
     axisX:{ 
      title: "Rooms" 
     }, 
     axisY:{ 
      title: "percentage" 
     }, 
     data: [ 
     { 
      type: "stackedColumn100", 
      legendText: "Boys", 
      showInLegend: "true", 
      indexLabel: "#percent %", 
      indexLabelPlacement: "inside", 
      indexLabelFontColor: "white", 
      dataPoints: [ 
       { y: 40, label: "Cafeteria"}, 
       { y: 10, label: "Lounge" }, 
       { y: 72, label: "Games Room" }, 
       { y: 30, label: "Lecture Hall" }, 
       { y: 21, label: "Library"} 
      ] 
     }, 
     { 
      type: "stackedColumn100", 
      legendText: "Girls", 
      showInLegend: "true", 
      indexLabel: "#percent %", 
      indexLabelPlacement: "inside", 
      indexLabelFontColor: "white", 
      dataPoints: [ 
       { y: 20, label: "Cafeteria"}, 
       { y: 14, label: "Lounge" }, 
       { y: 40, label: "Games Room" }, 
       { y: 43, label: "Lecture Hall" }, 
       { y: 17, label: "Library"} 
      ] 
     } 
     ] 
    }); 
    chart.render(); 
    } 
</script> 
<script type="text/javascript" src="/assets/script/canvasjs.min.js"></script></head> 
<body> 
<div id="chartContainer" style="height: 300px; width: 100%;"></div> 
</body> 
</html> 

Я пробовал один и тот же код на своей машине, и он работает нормально, но когда я загружаю его на свой сервер, я получаю вышеупомянутую ошибку.

Кто-нибудь знает, что здесь не так?

Спасибо!

ответ

1

Проблема заключается в ошибке в Canvas.js - они используют «for ... in» для итерации по массиву, но если какой-либо другой Javascript расширил прототип Array, они ошибочно предполагают, что массив не пуст и вы получите ошибку (см. Why is using "for...in" with array iteration a bad idea? для обсуждения этого типа проблемы).

Смотрите мой отчет об ошибке: http://canvasjs.com/forums/topic/canvas-js-javascript-bug/ и скрипку воспроизведении этого: http://jsfiddle.net/QwZuf/298/

Если вы готовы использовать не-Минимизированный код, вы можете временно залатать это самостоятельно с помощью «canvasjs.js» и местонахождения следующего (строка 2406 в 1.7.0 ГА):

for (index in plotAreaElements) { 
    plotAreaElements[index].render(); 
} 

Заверните его в простой тест длины, и вы должны быть хорошо, пока официальный патч не доступен:

if (plotAreaElements.length > 0) { 
    for (index in plotAreaElements) { 
     plotAreaElements[index].render(); 
    } 
} 

Редактировать: в комментариях ниже эта ошибка была официально исправлена.

+0

Это было исправлено в 1.7.5 и не было в 1.8.0GA. Пожалуйста, обратитесь к [this] (http://canvasjs.com/forums/topic/canvas-js-javascript-bug/#post-9488). –