摘要:所有我们在的时候需要将参数反转一下处理中的所有事件,如果有定义事件,将事件和回调函数,传入实例的对象中调用父类的重置方法。获取事件类型之外的所有参数参数传入事件函数调用可以说是框架的基石,的强大功能都是基于此类。
基类 NEJ.C() 定义
NEJ框架中定义一个类统一使用NEJ.C方法,使用范例如下所示:
/** * 类描述信息 * @class 类名称 * @extends {nej.ut._$$Event} * @param {Object} _options 可配置参数,已处理参数列表如下 * * */ _p._$$Class = NEJ.C();
通过此方法定义的类具有一下特性:
类具有静态方法_$extend,可以从其他类继承
实例具有__init方法用来初始化控件,该方法中通过__supInit调用父类__init方法
继承通过NEJ.C定义的类具有静态方法_$extend,可以从其他类集成,使用范例如下所示
//变量声明 var _ = NEJ.P, _p = _("nej.ut"), _x = _("m.x");//定义命名空间 /** * 类描述信息 * @class 类名称 * @extends {nej.ut._$$Event} * @param {Object} _options 可配置参数,已处理参数列表如下 * * */ _x._$$Class = NEJ.C(); _proClass = _x._$$Class._$extend(_p._$$Event); //console.log(new _x._$$Class);实现
通过NEJ.C定义的类会有__init方法来初始化类,该方法中可以通过__supInit调用父类的初始化方法。
下图展示了$$Event的所有方法。
注意:$开头的方法为公开方法,__开头的为私有方法不能在外部调用
_p._$$Event._$allocate = function(_options){ _options = _options||{}; //查看缓存池中是否有可用实例,如果有就是用缓存池中的实例 var _instance = !!this.__pool &&this.__pool.shift(); if (!_instance){ //新建实例 _instance = new this(_options); this.__inst__ = (this.__inst__||0)+1; } // 子类继承该方法重置控件 _instance.__reset(_options); return _instance; };
类初始化方法
_pro.__init = function(){ this.__events = {}; this.__events_dom = {}; this.id = _u._$uniqueID(); };
下面我们来看看控件基类的重置方法都做了些什么事情。
_pro.__reset = function(_options){ this._$batEvent(_options); }; _pro._$batEvent = (function(){ /** * _forIn(object,function(_value,_key){},this) * 所有我们在 _$setEvent的时候需要将参数反转一下 */ var _doSetEvent = function(_event,_type){ this._$setEvent(_type,_event); }; return function(_events){ _u._$forIn(_events,_doSetEvent,this); }; })(); _pro._$setEvent = function(_type,_event){ //处理options中的所有事件,如果有定义事件,将事件和回调函数,传入实例的__events对象中 if (!!_type&&_u._$isFunction(_event)){ this.__events[_type.toLowerCase()] = _event; } };
调用父类的重置方法。
调用父类的销毁方法
/** * 初始化DOM事件,重置接口{#__reset}中需要通过 * {nej.v#_$addEvent}接口添加的事件,使用此接口添加可以在回收时自动被清理 * [code] * // 子类重置接口添加节点事件 * _pro.__reset = function(_options){ * this.__supReset(_options); * // 添加DOM事件或者自定义事件 * this.__doInitDomEvent([ * [document,"click",this.__onDocClick._$bind(this)], * [window,"ok",this.__onWindowOK._$bind(this)] * ]); * }; * [/code] * @protected * @method {__doInitDomEvent} * @see {#__doClearDomEvent} * @param {Array} 待添加的事件配置列表 * @return {Void} */ _pro.__doInitDomEvent = (function(){ var _doAttach = function(_args){ if (!_args||_args.length<3) return; this.__events_dom["de-"+_u._$uniqueID()] = _args; _v._$addEvent.apply(_v,_args); }; return function(_list){ _u._$forEach(_list,_doAttach,this); }; })();
_pro._$setEvent = function(_type,_event){ if (!!_type&&_u._$isFunction(_event)){ this.__events[_type.toLowerCase()] = _event; } };
这个函数功能非常强大。
_pro._$dispatchEvent = function(_type){ var _type = (_type||"").toLowerCase(), _event = this.__events[_type]; if (!_event) return; //获取事件类型之外的所有参数 var _args = _r.slice.call(arguments,1); // single event if (!_u._$isArray(_event)){ //参数传入事件函数调用 return _event.apply(this,_args); } // event list _u._$forEach( _event,function(_handler){ try{ _handler.apply(this,_args); }catch(ex){ // ignore console.error(ex.message); console.error(ex.stack); } },this ); return this; };
_$$Event可以说是NEJ框架的基石,NEJ的强大功能都是基于此类。
参考:http://nej.netease.com/course/topic/component/
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/78175.html
摘要:回调使用事件可以支持多个成功后的回调。实际生产中,如果模块的数据层管理使用场景只有一个,也不需要在操作中做相关操作。一般只需要实例化成单例提供管理数据的相关事件到不同的组件。 说明 博文中code例子是基于nej编写,如果你没使用过nej,也不会妨碍你理解代码。 适用场景 实际开发中常遇到不同model对应多个view。用户通过 View 层来交互,View 有时需要根据用户的数据更新...
摘要:为内置变量,值为列表长度,上例中值为。语法备注循环时包含和值范例备注为内置变量,值为循环的索引值。描述遍历表语法注子语句为可选范例注为内置变量,值为当前项的键值。 复制到这里一下,方便日后查询,源地址如果模板中存在 将/换成/ 如何使用jst模板 代码举例: 序号姓名性别 {if !defined(worke...
摘要:一句化即它是插件的插件,作者事后才发现有这么一个插件绕了不少弯路。这里的主要是为了保存这段内容用于打包使用。免费领取验证码内容安全短信发送直播点播体验包及云服务器等套餐更多网易技术产品运营经验分享请访问网易云社区。文章来源网易云社区 本文由作者郑海波授权网易云社区发布。 前言我这里就不介绍requirejs了, 简而言之: requirejs是支持AMD规范的模块加载器, 事实上它也是...
摘要:此文已由作者张磊授权网易云社区发布。欢迎访问网易云社区,了解更多网易技术产品运营经验。前言在对蜂巢项目从迁移到的过程中,遇到的问题,以及在此过程中所使用的解决方案。三个头是一致的。文章来源网易云社区 此文已由作者张磊授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 前言在对蜂巢项目从 nej + regularjs 迁移到 vue 的过程中,遇到的问题,以及在此...
摘要:抽象语法树是怎么生成的谈到这点,就要说到计算机是怎么读懂我们的代码的。需要注意什么状态状态是抽象语法树转换的敌人,状态管理会不断牵扯我们的精力,而且几乎所有你对状态的假设,总是会有一些未考虑到的语法最终证明你的假设是错误的。 现在谈到 babel 肯定大家都不会感觉到陌生,虽然日常开发中很少会直接接触到它,但它已然成为了前端开发中不可或缺的工具,不仅可以让开发者可以立即使用 ES 规范...
阅读 3148·2023-04-25 20:35
阅读 3558·2019-08-30 15:54
阅读 1934·2019-08-30 15:43
阅读 2120·2019-08-29 15:14
阅读 1846·2019-08-29 11:17
阅读 3340·2019-08-26 13:36
阅读 639·2019-08-26 10:15
阅读 2730·2019-08-23 15:41