我的Symfony/ChartJS应用程序有点问题。
所以如果我用像var myChart = new Chart这样的JS创建一个图表。依此类推,我可以使用myChart.destory();轻松地销毁图表,因为我可以寻址ChartObject。
我的问题:我用SymfonyController呈现的第一个图表。因此,我在我的控制器中用
return $this->render('category.html.twig', [
'chart' => $chart]);在Twig中,我为图表{{ render_chart(chart, {'id': 'my-chart'}) }}分配一个ID。但我真的不知道我怎么才能在Js中演绎出整个夏洛宾特。那么,我怎样才能破坏我用Symfony控制器创建的图表呢?有人有建议吗?
提前谢谢你!
//用const chart = Chart.getChart('my-chart');编辑正常的方式也不起作用。下面是我的画布-ConsoleLog以获取更多信息:
<canvas data-controller="symfony--ux-chartjs--chart" data-symfony--ux-chartjs--chart-view-value="(i deleted the values for better legibility)" id="my-chart" style="display: block; box-sizing: border-box; height: 407.778px; width: 816.667px;" width="735" height="367"></canvas>奇怪的是:当我尝试日志:console.log(document.getElementById("my-chart").getContext("2d"););时,它显示:
CanvasRenderingContext2D {canvas: canvas#my-chart, globalAlpha: 1, globalCompositeOperation: 'source-over', filter: 'none', imageSmoothingEnabled: true, …}
canvas: canvas#my-chart
direction: "ltr"
fillStyle: "#000000"
filter: "none"
font: "12px \"Helvetica Neue\", Helvetica, Arial, sans-serif"
globalAlpha: 1
globalCompositeOperation: "source-over"
imageSmoothingEnabled: true
imageSmoothingQuality: "low"
lineCap: "butt"
lineDashOffset: 0
lineJoin: "miter"
lineWidth: 1
miterLimit: 10
shadowBlur: 0
shadowColor: "rgba(0, 0, 0, 0)"
shadowOffsetX: 0
shadowOffsetY: 0
strokeStyle: "#000000"
textAlign: "start"
textBaseline: "alphabetic"
[[Prototype]]: CanvasRenderingContext2D日志显示这张图表被识别了..。
发布于 2022-03-01 21:27:44
symfny-ux控制器在适当的刺激控制器内创建它的自己的ChartJS实例,并且这个变量是不可直接访问的。但是,symfony/ux开发人员很聪明,他们创建了events (例如chartjs:connect),您可以收听(链接)。
如果这样做,您将得到一个JS本机CustomEvent对象,并且在此事件的details属性中,您将发现以前在symfiny控制器中为chart.js创建的传递的chart实例,因此理论上您可以
document.addEventListener("chartjs:connect",(chartEv) => {
console.log(chartEv.details); // chartEv.details.chart.destroy()
});我确实建议您观看Ryan关于Symfony UX的教程,特别是“扩展UX”一章,在该章节中,他尝试使用以前创建的new Chart()实例,就像在您的示例中那样。
https://stackoverflow.com/questions/71305875
复制相似问题