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.
通过Magix.View.extend方法来实现
view的生命周期
显式的init、render方法
隐式的destroy,domready等事件接口
全局的htmlchanged事件
view的使用及分类
自身完整型
在外部来看要想改变calendar组件,只能通过参数,没有其它的途径
内部必有js及html,且只接收参数控制显示的我们把它定义为自身完整型组件
附加行为型
内部没有html,且对现有dom节点做增强的组件,我们把它定义为附加行为型组件
混合型
或
差异化更新
html片断拆分的形式
该方式需要配合magix-combine工具对开发者编写的html模板做线下分析,自动把模板拆分成n多子模板片断,每个片断关联着对应的数据key,当数据有变化时,会找到相应的子模板片断,最小化的更新界面
如模板
会被处理成这样的片断对象
这样如果只有list这个数据发生变化时,只有第一个div会被重新渲染
这种方式受dom结构的影响,无法再做进一步的细粒度的拆分,有时候刷新区域仍然较大
真实dom节点比对更新
因为magix一直使用的是字符串模板,如果直接转成虚拟dom的形式,要想性能最优,jsx是最理想的方式(通过工具直接把类似字符串的形式转成方法的调用)。这样一来开发者需要做很大的转变,再一个目前也没有人和精力来做这个事情。
关于dom diff网上的方案非常多,虚拟和虚拟的,虚拟和真实的,真实和真实等。考虑到成本问题,目前采用的是真实dom与真实dom的对比(1.不需要考虑浏览器兼容2.不需要做转换3.不需要自己实现),只做好diff即可。https://github.com/patrick-steele-idem/morphdom
差异化更新与组件的问题
组件销毁、重建问题
考虑这样的html代码
mx-calendar组件的日期选中受currentDate的控制,如果第一次currentDate是2018-01-01,数据变化后currentDate是2018-04-01
magix在差异化更新时,由于组件所在的节点是一个特殊节点,比较到该节点时,因为不知道组件会如何变化,所以会销毁旧组件,更新完dom节点后,再实例化新组件。
这样一来因为一个小小的数据变化,需要销毁旧组件,再渲染新组件,显得比较笨重了。
magix中节点diff的步骤如下:
流程中重要的一点是组件即view有没有assign方法,如果有该方法,则调用该方法把数据传递进去,组件在该方法内完成数据的更新,如果该方法的返回值是true,则再调用组件的render方法完成更新,从而不需要销毁组件
自己添加的属性被删除问题
其它问题
dom比对的方式千万不要自己创建、删除任何节点!!!
The text was updated successfully, but these errors were encountered: