让 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);