usdglander
@usdglander
Yipee-ki-yay

Как привязать обработчик клика по точке в Highcharts?

Добрый день.
В Yii2 использую виджет www.yiiframework.com/extension/yii2-highcharts-widget
<?php

use miloschuman\highcharts\Highcharts;

$this->registerAssetBundle('yii\web\YiiAsset');

echo Highcharts::widget([
   'options' => [
		'title' => ['text' => 'Статистика за месяц'],
		'xAxis' => [
		   'categories' => array_keys($statistic)
		],
		'yAxis' => [
		   'title' => ['text' => 'Достижения цели']
		],
		'series' => [
		   ['name' => 'Jane', 'data' => array_values($statistic), 'class'=>'test-class'],
		],
		'plotOptions' => [
			'series' => [
				'cursor' => 'pointer',
				'point' => [
					'events' => [
						'click' => 'function(e){ alert(this.x); }'
					]
				]
			]
		]
   ]
]);

Всё работает, всё хорошо, но вот при попытке кликнуть по точке в консоли браузера всплывает:
Uncaught TypeError: ((jQuery.event.special[handleObj.origType] || (intermediate value)).handle || handleObj.handler).apply is not a function

Во фронте не силён, поэтому решил посмотреть код, который генерирует виджет. В итоге вижу (только ключевой момент):
...],"plotOptions":{"series":{"cursor":"pointer","point":{"events":{"click":"function(e){ alert(this.x); }"}}}}});

Я так понимаю ошибка связана именно с тем, что function как строка воспринимается. В связи с этим вопрос, как вылечить и ЧЯДНТ?
Заранее спасибо!
  • Вопрос задан
  • 1090 просмотров
Решения вопроса 1
AloneCoder
@AloneCoder
[object Object]
use yii\web\JsExpression;

upd. Подробнее
<?php

use miloschuman\highcharts\Highcharts;
use yii\web\JsExpression;

$this->registerAssetBundle('yii\web\YiiAsset');

echo Highcharts::widget([
   'options' => [
    'title' => ['text' => 'Статистика за месяц'],
    'xAxis' => [
       'categories' => array_keys($statistic)
    ],
    'yAxis' => [
       'title' => ['text' => 'Достижения цели']
    ],
    'series' => [
       ['name' => 'Jane', 'data' => array_values($statistic), 'class'=>'test-class'],
    ],
    'plotOptions' => [
      'series' => [
        'cursor' => 'pointer',
        'point' => [
          'events' => [
            'click' => new JsExpression('function(e){ alert(this.x); }')
          ]
        ]
      ]
    ]
   ]
]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы