Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(ec-canvas.js): 针对lazyLoad的情况,防止init在视图层ready之前被触发 #560

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

begoat
Copy link

@begoat begoat commented Sep 30, 2019

如果在ready之前调用(可能是通过property的observe函数触发)
会导致selectorQuery canvas节点返回null后续取width、height直接报错,

@Ovilia
Copy link
Member

Ovilia commented Sep 30, 2019

感谢贡献,请问可以提供一个测试 case 吗?

@begoat
Copy link
Author

begoat commented Sep 30, 2019

@Ovilia Hi,通过小程序的code snippet 做了个demo会产生报错,
不过基础库版本切换到 2.8.0就不会报错,不知道为什么会这样。

描述下问题:
针对echarts封装了一个 echarts-base 处理所有图表通用的需求,比如因为canvas是原生组件,会出现在所有的组件之上,为了解决这个问题,组件得有一个图片模式,所以把这个组件封装一层,接受option。

然后 lazyload-demo 组件是demo图表的组件,引用了echarts-base,定义了一些我需要图的样式的option,然后接受 数据参数 作为property,一旦这个数据参数变化,更新option 然后触发 charts-base 的更新。

一开始lazyLoad-demo组件给到 charts-base的option 不是空,而是option里面的data为空,跟默认值空不同,会触发一次更新,这个过程 charts-base 还没有ready,所以选择器选择不到会报错。

当然这个是有一些方法避免的,但我觉得问题的本质是 允许 在ready前调用了init,导致没拿到UI数据,所以我觉得改ec-canvas.js 比较合理。

https://developers.weixin.qq.com/s/9jB3ILm37tb2

麻烦看下

@lyj0158
Copy link

lyj0158 commented Mar 16, 2023

解决了吗

@begoat
Copy link
Author

begoat commented Mar 18, 2023

解决了吗

印象中没解决,绕过去了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants