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.
为什么要有mixins
参考 react 的 mixins https://segmentfault.com/a/1190000002704788
mixins的定位
依附在view上,增强或提供某些功能。
与组件的区别
与继承的区别
我们举例说明
功能实现
在实际运用中我们可能有以下情况
我们面向未来再考虑以下可能有的情况
当我们用继承实现时,会发现很难根据当前列表的需求只使用某些功能,比如列表要带checkobx并且显示loading动画。只能提供一个大而全的列表类型的基类,把所有功能在基类实现,不管子类需不需要。
并且在后期维护的时候很难改动,因为作为基类是不能放心大胆的修改的。
mixins是把上述的每个功能点单独实现,然后view要某个功能就把相应的功能点mix进来。
mixins的使用示例
mixins的实现细节
mixins的实现
mixins的实现与react的相似,返回一个对象即可,magix会把返回的对象mix到当前view的prorotype上。
所以在mixin中完全可以使用view中定义的所有方法和事件
magix会对mixin中的某些点做特殊处理,详见下述内容
mixins的初始化
当我们实现一个跨翻页保存数据的mixin时,需要在view初始化的时候声明一些变量
使用
ctor
做初始化的工作。ctor方法会在view初始化时调用,且在view的init方法被调用前调用一个view使用多个mixin时,每一个mixin的ctor方法均会被调用,且按mixins中的数组顺序进行调用。
mixins的事件处理
因为mixin的对象是mix到view的prototype上的,因此可以使用view的事件绑定,示例如下
这时候就需要在html的全选checkbox添加上
mx-change="selectAll()
事件所以这样的方式在使用mixin时显得不方便,事件绑定也可以使用选择器的形式进行绑定,示例如下
这样就不需要修改html了,
但这种情况要考虑view嵌套的情况下,选择器选中子view的情况。。 已实现选择器事件的隔离功能,即使选中子view中的节点,也不会响应这个事件不过综合来看,推荐使用选择器方案进行绑定
事件绑定细节考虑
多个mixin绑定了同一个事件和同一个名称或同一个选择器。
还是以前面的全选为例,假设有2个或更多个mixin都使用同样的选择器绑定了全选checkbox该如何处理
假设某个view同时使用了mixins-1和mixins-2
这种情况magix会把这2个mixin的事件都绑定上,它们会同时工作,调用顺序取决于mixins中的数组顺序。
如果view中也实现了插件中的事件绑定,如下:
这种情况2个mixin中的事件将不会被绑定,即checkbox状态发生变化时,只会打印出view中的log
当我们拦截,加上自己的处理逻辑后,仍然可以再调用mixin中的方法进行继续处理,如
mixins中的普通方法
除ctor和事件绑定外,其它方法均为普通方法。多个mixin之间的普通方法不能有相同名称,只有ctor和事件绑定允许相同名称。
多个mixin中相同名称的普通方法在应用到同一个view上时,magix会抛出错误,需要开发者设计mixin时注意,这点也与react的mixin相似。
相关链接
事件绑定可参考:
内置不再支持$win与$doc的事件绑定,另外处理(更新:仍然支持~)
magix中的2种事件绑定方式
The text was updated successfully, but these errors were encountered: