首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >销毁使用Symfony呈现的ChartJS

销毁使用Symfony呈现的ChartJS
EN

Stack Overflow用户
提问于 2022-03-01 08:51:30
回答 2查看 400关注 0票数 0

我的Symfony/ChartJS应用程序有点问题。

所以如果我用像var myChart = new Chart这样的JS创建一个图表。依此类推,我可以使用myChart.destory();轻松地销毁图表,因为我可以寻址ChartObject。

我的问题:我用SymfonyController呈现的第一个图表。因此,我在我的控制器中用

代码语言:javascript
运行
复制
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以获取更多信息:

代码语言:javascript
运行
复制
<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"););时,它显示:

代码语言:javascript
运行
复制
  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

日志显示这张图表被识别了..。

EN

Stack Overflow用户

回答已采纳

发布于 2022-03-01 21:27:44

symfny-ux控制器在适当的刺激控制器内创建它的自己的ChartJS实例,并且这个变量是不可直接访问的。但是,symfony/ux开发人员很聪明,他们创建了events (例如chartjs:connect),您可以收听(链接)。

如果这样做,您将得到一个JS本机CustomEvent对象,并且在此事件的details属性中,您将发现以前在symfiny控制器中为chart.js创建的传递的chart实例,因此理论上您可以

代码语言:javascript
运行
复制
document.addEventListener("chartjs:connect",(chartEv) => { 
console.log(chartEv.details); // chartEv.details.chart.destroy()
});

我确实建议您观看Ryan关于Symfony UX的教程,特别是“扩展UX”一章,在该章节中,他尝试使用以前创建的new Chart()实例,就像在您的示例中那样。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71305875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档