关于图表刷新参数不一致的问题

houb 发布于 2013/09/06 11:17
阅读 286
收藏 0

{void} refresh {void} 刷新图表,图例选择、数据区域缩放,拖拽状态均保持。
在API中刷新函数说明是不用参数的。但在实际代码中不是。这个param需要传什么东西进去了?

option也只是它的一个属性?

/**
		* 刷新 
		*/
		function refresh(param)
		{
			if (param.option)
			{
				var zrUtil = require('zrender/tool/util');
				_optionRestore = zrUtil.clone(param.option);
				_optionBackup = zrUtil.clone(param.option);
				_option = zrUtil.clone(param.option);
			}

			// 先来后到,不能仅刷新自己,也不能在上一个循环中刷新,如坐标系数据改变会影响其他图表的大小
			// 所以安顺序刷新各种图表,图表内部refresh优化无需更新则不更新~
			for (var i = 0, l = _chartList.length; i < l; i++)
			{
				_chartList[i].refresh && _chartList[i].refresh(param.option);
			}
			_zr.refresh();
		}


加载中
0
Kener-林峰
Kener-林峰

被你发现了,这个refresh带参是动态数据维持同步用,也是留给一下深度定制交互时用的,我们不建议外部直接使用,所以官方就是refresh就好,其实一般情况下外部无需理会refresh接口,要用最多也就调用resize好了~


0
Kener-林峰
Kener-林峰
这段代码应该是主干上的吧,有个bug已经改了,下次release会修正
0
h
houb

引用来自“Kener-林峰”的答案

被你发现了,这个refresh带参是动态数据维持同步用,也是留给一下深度定制交互时用的,我们不建议外部直接使用,所以官方就是refresh就好,其实一般情况下外部无需理会refresh接口,要用最多也就调用resize好了~


我们在用Echarts的时候,很多属性是动态变化的。比如标题,第一次图形生成时没e ,然后通过setOption()将标题设置到图中。这时候resize的话标题是不会显示出来的,所以要用到刷新。不然只能整个图重新初始化。现在就是通过setOption之后,再getOption(我自己加的)然后用get出来的option重新初始化整个图。这样刷新的。但是这样的话图例选择、数据区域缩放,拖拽状态就没了。

所以。还是想用这个refresh(),能不能说下这个参数应该怎么写了?

0
h
houb

引用来自“Kener-林峰”的答案

这段代码应该是主干上的吧,有个bug已经改了,下次release会修正
刚刚下的最新代码,这个param还是不能为null
function refresh(param) {
            // 先来后到,不能仅刷新自己,也不能在上一个循环中刷新,如坐标系数据改变会影响其他图表的大小
            // 所以安顺序刷新各种图表,图表内部refresh优化无需更新则不更新~
            for (var i = 0, l = _chartList.length; i < l; i++) {
                _chartList[i].refresh && _chartList[i].refresh(param.option);
            }
            _zr.refresh();
        }
0
Kener-林峰
Kener-林峰

恩,就是这个问题,release后param就能为空了。

你说的应用场景有道理,升级了一下代码,重新checkout吧,应该能满足你的需求,修改属性类的需求。

但外部调用refresh我这只能做简单的差异合并去同步内部持有的数据克隆,不建议带入数据,因为在开启数据区域缩放、拖拽重计算、数据视图可编辑模式情况下,当用户产生了数据变化后(可能是一连串的交互操作),这时候内部持有的数据克隆跟外部数据已经相差甚远,无法同步,如需带入option做数据变化,建议关闭所有用户可改变数据的交互,或重新setOption

返回顶部
顶部