You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Nov 12, 2024. It is now read-only.
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即可
The text was updated successfully, but these errors were encountered: