成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

NEJ _$$Event類

BenCHou / 2097人閱讀

摘要:所有我們在的時候需要將參數(shù)反轉(zhuǎn)一下處理中的所有事件,如果有定義事件,將事件和回調(diào)函數(shù),傳入實例的對象中調(diào)用父類的重置方法。獲取事件類型之外的所有參數(shù)參數(shù)傳入事件函數(shù)調(diào)用可以說是框架的基石,的強大功能都是基于此類。

基類 NEJ.C() 定義

NEJ框架中定義一個類統(tǒng)一使用NEJ.C方法,使用范例如下所示:

/**
 * 類描述信息
 * @class 類名稱
 * @extends {nej.ut._$$Event}
 * @param {Object} _options 可配置參數(shù),已處理參數(shù)列表如下
 * 
 * 
 */
_p._$$Class = NEJ.C();

通過此方法定義的類具有一下特性:

類具有靜態(tài)方法_$extend,可以從其他類繼承

實例具有__init方法用來初始化控件,該方法中通過__supInit調(diào)用父類__init方法

繼承

通過NEJ.C定義的類具有靜態(tài)方法_$extend,可以從其他類集成,使用范例如下所示

//變量聲明
var _ = NEJ.P,
    _p = _("nej.ut"),
    _x = _("m.x");//定義命名空間

/**
 * 類描述信息
 * @class 類名稱
 * @extends {nej.ut._$$Event}
 * @param {Object} _options 可配置參數(shù),已處理參數(shù)列表如下
 *
 *
 */
_x._$$Class = NEJ.C();
_proClass = _x._$$Class._$extend(_p._$$Event);
//console.log(new _x._$$Class);
實現(xiàn)

通過NEJ.C定義的類會有__init方法來初始化類,該方法中可以通過__supInit調(diào)用父類的初始化方法。

__init

__supInit

_$$Event

下圖展示了$$Event的所有方法。

注意:
$開頭的方法為公開方法,__開頭的為私有方法不能在外部調(diào)用

類方法
_$allocate

_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;
};
_$recycle

_$getInstance

實例私有方法(定義在原型對象的私有方法,外部不能直接調(diào)用)
__init

類初始化方法

_pro.__init = function(){
    this.__events = {};
    this.__events_dom = {};
    this.id = _u._$uniqueID();
};
__reset


下面我們來看看控件基類的重置方法都做了些什么事情。

_pro.__reset = function(_options){
    this._$batEvent(_options);
};

_pro._$batEvent = (function(){

    /**
     * _forIn(object,function(_value,_key){},this)
     * 所有我們在 _$setEvent的時候需要將參數(shù)反轉(zhuǎn)一下
     */
    var _doSetEvent = function(_event,_type){
        this._$setEvent(_type,_event);
    };

    return function(_events){
        _u._$forIn(_events,_doSetEvent,this);
    };
})();

_pro._$setEvent = function(_type,_event){
    //處理options中的所有事件,如果有定義事件,將事件和回調(diào)函數(shù),傳入實例的__events對象中
    if (!!_type&&_u._$isFunction(_event)){
        this.__events[_type.toLowerCase()] = _event;
    }
};
__supReset

調(diào)用父類的重置方法。

__destroy

__supDestroy

調(diào)用父類的銷毀方法

__doInitDomEvent

/**
 * 初始化DOM事件,重置接口{#__reset}中需要通過
 * {nej.v#_$addEvent}接口添加的事件,使用此接口添加可以在回收時自動被清理
 * [code]
 *   // 子類重置接口添加節(jié)點事件
 *   _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);
    };
})();
_$recycle

事件方法:事件方法也是實例方法,控件封裝時主要以使用為主
_$setEvent

_pro._$setEvent = function(_type,_event){
    if (!!_type&&_u._$isFunction(_event)){
        this.__events[_type.toLowerCase()] = _event;
    }
};
_$batEvent

_$hasEvent

_$clearEvent

_$pushEvent

_$dispatchEvent


這個函數(shù)功能非常強大。

_pro._$dispatchEvent = function(_type){
    var _type = (_type||"").toLowerCase(),
        _event = this.__events[_type];
    if (!_event) return;
    //獲取事件類型之外的所有參數(shù)
    var _args = _r.slice.call(arguments,1);
    // single event
    if (!_u._$isArray(_event)){
        //參數(shù)傳入事件函數(shù)調(diào)用
        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/

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78175.html

相關(guān)文章

  • mv**中,用數(shù)據(jù)層解決多個view對應不同model的問題

    摘要:回調(diào)使用事件可以支持多個成功后的回調(diào)。實際生產(chǎn)中,如果模塊的數(shù)據(jù)層管理使用場景只有一個,也不需要在操作中做相關(guān)操作。一般只需要實例化成單例提供管理數(shù)據(jù)的相關(guān)事件到不同的組件。 說明 博文中code例子是基于nej編寫,如果你沒使用過nej,也不會妨礙你理解代碼。 適用場景 實際開發(fā)中常遇到不同model對應多個view。用戶通過 View 層來交互,View 有時需要根據(jù)用戶的數(shù)據(jù)更新...

    tommego 評論0 收藏0
  • nej jst模板語言標簽

    摘要:為內(nèi)置變量,值為列表長度,上例中值為。語法備注循環(huán)時包含和值范例備注為內(nèi)置變量,值為循環(huán)的索引值。描述遍歷表語法注子語句為可選范例注為內(nèi)置變量,值為當前項的鍵值。 復制到這里一下,方便日后查詢,源地址如果模板中存在 將/換成/ 如何使用jst模板 代碼舉例: 序號姓名性別 {if !defined(worke...

    馬永翠 評論0 收藏0
  • requirejs的插件介紹與制作

    摘要:一句化即它是插件的插件,作者事后才發(fā)現(xiàn)有這么一個插件繞了不少彎路。這里的主要是為了保存這段內(nèi)容用于打包使用。免費領取驗證碼內(nèi)容安全短信發(fā)送直播點播體驗包及云服務器等套餐更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗分享請訪問網(wǎng)易云社區(qū)。文章來源網(wǎng)易云社區(qū) 本文由作者鄭海波授權(quán)網(wǎng)易云社區(qū)發(fā)布。 前言我這里就不介紹requirejs了, 簡而言之: requirejs是支持AMD規(guī)范的模塊加載器, 事實上它也是...

    shinezejian 評論0 收藏0
  • 網(wǎng)易蜂巢(云計算基礎服務)項目框架遷移指北(一)

    摘要:此文已由作者張磊授權(quán)網(wǎng)易云社區(qū)發(fā)布。歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗。前言在對蜂巢項目從遷移到的過程中,遇到的問題,以及在此過程中所使用的解決方案。三個頭是一致的。文章來源網(wǎng)易云社區(qū) 此文已由作者張磊授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運營經(jīng)驗。 前言在對蜂巢項目從 nej + regularjs 遷移到 vue 的過程中,遇到的問題,以及在此...

    taoszu 評論0 收藏0
  • Babel 插件原理的理解與深入

    摘要:抽象語法樹是怎么生成的談到這點,就要說到計算機是怎么讀懂我們的代碼的。需要注意什么狀態(tài)狀態(tài)是抽象語法樹轉(zhuǎn)換的敵人,狀態(tài)管理會不斷牽扯我們的精力,而且?guī)缀跛心銓顟B(tài)的假設,總是會有一些未考慮到的語法最終證明你的假設是錯誤的。 現(xiàn)在談到 babel 肯定大家都不會感覺到陌生,雖然日常開發(fā)中很少會直接接觸到它,但它已然成為了前端開發(fā)中不可或缺的工具,不僅可以讓開發(fā)者可以立即使用 ES 規(guī)范...

    draveness 評論0 收藏0

發(fā)表評論

0條評論

BenCHou

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<