【问题标题】:dc.js - Listening for chart group renderdc.js - 监听图表组渲染
【发布时间】:2014-08-16 02:58:42
【问题描述】:

我正在尝试重构一些我编写的自定义 d3 代码,以通过引入 dc.js 来呈现一系列交叉过滤器驱动的图表。

我的主要问题是我有一些 dc.js 不支持的图表类型(例如 Sunburst Partition),我正在尝试弄清楚如何将它们与 dc.js 图表组一起呈现。

过滤单个 dc.js 图表将自动呈现/重绘属于同一 chartGroup 的所有其他图表。是否有可能以某种方式挂钩该全局重新渲染事件,以便我可以同时重新绘制非 DC 图表?

我了解每个图表上都有听众,例如chart.on("postRender", function(chart){...}) 但似乎没有办法重新渲染一组图表。有没有一个好的模式可以做到这一点?

【问题讨论】:

    标签: d3.js dc.js crossfilter


    【解决方案1】:

    执行此操作的“正确”方法是使用 dc.registerChart 在 dc 注册表中注册您的图表

    您只需在某个对象(您的图表或包装器)上实现.redraw().render(),并将该对象作为第一个参数传递。

    将它与它应该响应的图表放在同一组(第二个参数)中。

    render() 从头开始​​创建 dom 元素,redraw() 在数据更改时更新它们。

    根据图表的使用方式,您可能还需要实现.filterAll().anchorName()

    【讨论】:

    • 谢谢!这似乎是最干净的方式。我打算像 dc.js 用户组中有人建议的那样,在一个随机的 dc 图表上简单地听重绘事件,但这无疑有点 hackish ;-) 我会试一试,让你知道如何它去了。
    • 我相信还有.refocusAll() 用于在图表组上重置缩放级别/焦点范围。
    • 如果你想参与注销你的图表,你需要提供一个.anchorName() 函数来返回某种guid。我只是在构造函数中使用Math.random() * 1000000 << 0; 生成一个随机整数并将其保存为成员,然后从我的anchorName 中返回它。一种自制的_dcFlags 标识符。任何东西都会起作用,它只是用作从注册表中删除它的键。
    • 能否也提供一个例子?很难找到...
    • @user3329081,抱歉回复缓慢。 Here is one minimal example。您还可以查看一些非常简单的小部件的源代码,例如 number display,尽管您实际上不需要从任何 dc.js 基类派生以与 dc.js 兼容。
    猜你喜欢
    • 2013-10-14
    • 2021-02-13
    • 2014-04-23
    • 1970-01-01
    • 2015-11-22
    • 2015-06-06
    • 2023-03-10
    • 2020-04-23
    • 2012-01-25
    相关资源
    最近更新 更多