让 FNX 每个模块更加明了。基础设施很重要。这可以作为一份参考,或一份整理。
Class
Class.create(config) //Class作为父类。
parent.extend(config) //也是执行Class.create,parent为父类
someclass.implement(conifg) //便捷的绑定方法
Class(Animal).extend(config) //转会为FNX Class类。
config:
Extends: //继承某个类
Implements //从多个类混入原型
Statics //混入对象属性
initialize //初始化自动调用
superclass //访问父类原型方法
Events
on //绑定方法,支持同一事件绑定多个方法
off //移除事件,不同参数不同意义。
trrigger //触发事件,支持多个事件同时触发,用空格隔开
mixTo
Attrs
attrs{xxx:{getter:,setter:,readOnly:}} //多种格式传入attrs,
内部将每一个属性处理为具有value,getter,setter,readOnly的对象
on_ChangeXxx //set的时候自动调用。内部会转化为change事件。
get //若初始化时传入getter,会调用getter。set同理
set
change //如果有on_ChangeXxx,都将转化为change。
或着也可以手动触发change,对所有未触发change事件的属性全部触发一次
initAttrs //一般不需要覆盖。
Aspect
before //逻辑中使用event,不能直接调用,提供给base用。
after
Base
综合上面四个
Widget
propsInAttrs: ['initElement', 'element', 'events'] //直接添加到实例上,转变成properties
render //添加到dom中
_onRenderA //属性改变时触发,
当属性为null或undefined时触发。将来也是注册到change方法
Events //events hash
destroy //销毁
element //每个Widget值对应一个element。
实例化时传入,或由模板生成
initProps //提供给子类,处理属性
delegateEvents //事件代理到this.element上
setup //空函数,供子类覆盖
Widget.autoRender = AutoRender.autoRender;
Widget.autoRenderAll = AutoRender.autoRenderAll;
query
data-attr //DOM中书写,都将转化为属性。Class
提供简单OO,用最多的恐怕就是继承了。
Implement,Extends的实现是不得不赞的。
Events
DOM无关事件。好处太多。
on,off支持同一事件多次绑定,将零散的函数整合到了一起。
Base
拥有extend,implement,on,off,trigger,before,after,get,set,initAtts,change等方法。甚是强大。
get,set不在多说,_onChangeXxx绑定属性改变时的函数,将来自动调用。
before,after 切面编程。
Widget
Base.extend建造,拥有Base所有方法。
轻量级MVC支持。
实例化时五个步骤。每一个方法都应该记得。
可混入模板。建立组件时,Implements: Templatable 足以。
FNX UI基础类。很多方法可以被子类覆盖,在覆盖的时候,考虑要不要调用父类同名方法。
如MyWidget.superclass.initAttrs.call(this, config);