Skip to content
This repository has been archived by the owner on Nov 12, 2024. It is now read-only.

Magix.local与View.share #19

Closed
xinglie opened this issue Aug 4, 2016 · 3 comments
Closed

Magix.local与View.share #19

xinglie opened this issue Aug 4, 2016 · 3 comments

Comments

@xinglie
Copy link
Member

xinglie commented Aug 4, 2016

3.x之前的版本为了解决view间数据传递问题,提供了Magix.local方法,这个其实和全局变量差不多。

在具体项目实施中Magix.local主要有以下问题

忘记销毁

曾有这样的事情发生:a页面子view需要数据,通过Magix.local共享了d1,d2两个数据对象,切换到b页面时,b页面的子view仍然需要d1,d2两个数据,因为a,b2个页面共享了子view。切到b页面时,b通过Magix.local重新设置了d1,d2两个数据,所以开始是没问题的

后来功能扩展,共享的子view需要d3这个数据,a页面仍然通过Magix.local共享了d3数据,但是不巧的是,b页面因为忘记设置d3数据,导致从a页面切换到b页面时,b页面的d1,d2是b自己的,而d3是之前a页面的,导致功能异常。

这个理想情况是谁设置的数据,在页面离开即view销毁时就应该把数据也销毁,但遗憾的是,大家在使用中通常会忘记这样做

滥用

因为Magix.local类似全局变量一样可以随意共享数据,这就导致如果在某个地方出现Magix.local读取数据时,往往不清楚设置数据的地方在哪里。

3.x尝试解决这个问题,因为数据传递在复杂应用中是很难避免的。

通过观察之前项目中的应用,数据共享绝大多数情况发生在区块嵌套的情况下,也就是需要共享的数据都存在上下级的关系,3.x尝试在view上挂一个share方法 https://thx.github.io/magix-doc3/?to=share 用于向子或孙view共享数据

而子或孙view则可以通过getShared方法获取祖先共享的数据 https://thx.github.io/magix-doc3/?to=getShared

因为数据是和view关联的,所以当view被销毁时,数据自然也就不存在了,这样用户无须关心数据的销毁,页面切换也不会有任何隐患。

当然这些方法需要项目实践,所以它是一个可选的模块,当您需要时,要启用这个share模块,重新编译magix即可

@xinglie
Copy link
Member Author

xinglie commented Aug 4, 2016

share 与 getShared 只作用于有上下关系的区块上,所以后续可以通过 区块查看器 分析出哪个节点上共享了数据,可以直观的查看共享数据的源头,而不用像之前那样完全不清楚是哪个view共享的数据

@xinglie
Copy link
Member Author

xinglie commented Aug 19, 2016

数据共享可视化已完成 https://github.com/thx/magix-inspector/issues/2

@xinglie
Copy link
Member Author

xinglie commented Jul 5, 2017

优先使用Magix.State #39

@xinglie xinglie closed this as completed Jul 5, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant