PHP. Это часть массива конфигурации Highchart, возвращаемого функцией PHP (которая является json_encoded)
'plotOptions' => array( 'pie' => array( 'allowPointSelect' => TRUE, 'cursor' => 'pointer', 'dataLabels' => array( 'enabled' => TRUE, 'color' => '#000000', 'connectorColor' => '#000000', 'formatter' => "function() { return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %' }" ) ) )
JavaScript – доступ к этой информации из кодированных данных
container.highcharts(r.hc); // r.hc is the array that contains the highchart information above
Проблема, с которой я сталкиваюсь:
Uncaught TypeError: Object function() { return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %' } has no method 'call'
Как изменить это, чтобы он распознал его как функцию? Или это даже возможно?
Выполнение javascript из удаленного источника – плохая идея, так как вы не можете доверять ей. Однако, если вам необходимо:
Функция, включенная в json, является строкой, поэтому вам необходимо ее оценить:
pie.dataLabels.formatter = eval('('+pie.dataLabels.formatter+')');
для каждого метода объекта, который необходимо преобразовать.
Однако, как сказано в начале, существует почти наверняка решение, которое не требует от вас загрузки javascript таким образом.
Я решил только возвратить данные серии для highchart pie … вместо всего массива конфигурации highchart … plotOptions теперь определены в javascript и не возвращены json_encoded PHP-массивом.
Я не слишком уверен, почему я это делаю, но спасибо за всю помощь с eval!