DikeJsベースクラスBaseClassの作成


コンポーネントのベースクラスを記述する際、このクラスのメソッドと属性をこんなに密に記述するとは思わなかったが、D.js(DikeJS core component)DikeJsのコアコンポーネントの出現で、メソッドがさらに拡張され、D.jsは現在、IDとNAMEに基づいてインスタンス化されたコンポーネントオブジェクトを取得する方法が1つしかない.ベースクラスBaseClassに存在する共通属性、メソッド、およびプライベート属性は、各コンポーネントが継承時に選択性を持つようにします.今DikeJSの成长は本当に多くの偶然と思惟の跳躍を持っていて、1つの类の内容は読者にとても大きい疑问が存在することができるかもしれなくて、これらの疑问を処理するために、私はできるだけ注釈を书くのが最も良いです.
BaseClass.js 
/**
 * @Author Dike.Li
 * @Date 2015/8/31
 * @class BaseClass
 * @public
 * @Description Basic classes for all components,have basic methods.
 */
define(function (require) {
    var dMapId = {};
    var dMapName = {};

    var baseClass = (function (temp, option, $, _thisMe) {
        var me = this;

        /**
         *       jquery  
         */
        var tempObj = $(temp);

        /**
         *       
         */
        var quite = null;

        /**
         *       
         */
        var cls = null;

        /**
         *     
         */
        var handle = (function (option, tempObj) {
            /**
             *     
             */
            if (isDefine(option.listeners)) {
                for (var listenerName in option.listeners) {
                    if (listenerName === 'render') {
                        option.listeners[listenerName](tempObj);
                        continue;
                    }
                    tempObj.on(listenerName, option.listeners[listenerName]);
                }
            }

            /**
             *  id name        
             */
            if (isDefine(option.id)) {
                dMapId[option.id] = _thisMe;
            }
            if (isDefine(option.name)) {
                dMapName[option.name] = _thisMe;
            }
        });

        /**
         *  option    render              
         */
        if (isDefine(option.renderTo)) {
            $.each(tempObj, function (index, value) {
                option.renderTo.append(value);
            });
            handle(option, tempObj);
        }

        /**
         *         add      
         * @param isHave value: true or false
         */
        me.setIsHaveAdd = (function (isHave) {
            if (isHave) {
                /**
                 *          
                 */
                var addItems = (function (objs) {
                    objs.forEach(function (obj) {
                        if (isDefine(obj.getEl)) {
                            tempObj.append(obj.getEl());
                        } else {
                            tempObj.append(obj);
                        }
                    });
                });
                if (isDefine(option.items)) {
                    addItems(option.items);
                }
                me.addItems = addItems;

                /**
                 *             
                 */
                me.add = (function (obj) {
                    if (isDefine(obj.getEl())) {
                        tempObj.append(obj.getEl());
                    } else {
                        tempObj.append(obj);
                    }
                });
            }
        });

        /**
         *       
         */
        me.setQuote = (function (array) {
            quite = array;
        });

        /**
         *         
         */
        me.getQuote = (function () {
            return quite;
        });

        /**
         *          
         */
        me.getTemp = (function () {
            return temp;
        });

        /**
         *   temp jquery object
         */
        me.getDom = (function () {
            return tempObj;
        });

        /**
         *       
         */
        me.getObj = (function () {
            return tempObj;
        });

        /**
         *    Element  
         */
        me.getEl = (function () {
            var el = '';
            $.each(tempObj, function (index, value) {
                if (isDefine(value.outerHTML)) {
                    el += value.outerHTML;
                }
            });
            return el;
        });

        /**
         *     
         * @param name
         * @param fn
         */
        me.on = (function (name, fn) {
            tempObj.on(name, fn);
        });

        /**
         *     ID
         * @return id
         */
        me.getId = (function () {
            return typeof(tempObj.attr('id')) === 'undefined' ? null : tempObj.attr('id');
        });

        /**
         *     NAME
         * @return name
         */
        me.getName = (function () {
            return typeof(tempObj.attr('name')) === 'undefined' ? null : tempObj.attr('name');
        });

        /**
         *       
         * @param obj is array ['cls1','cls2']
         */
        me.setCls = (function (obj) {
            cls = obj;
        });

        /**
         *            
         */
        me.getCls = (function () {
            return cls;
        });

    });

    /**
     *       
     * @param obj
     * @return boolean
     */
    var isDefine = (function (obj) {
        return typeof(obj) === 'undefined' ? false : true;
    });

    /**
     *       
     */
    var setWidth = (function (tempObj, value) {
        if (isDefine(value)) {
            tempObj.css('width', value + 'px');
        }
    });

    /**
     *     
     */
    var setHeight = (function (tempObj, value) {
        if (isDefine(value)) {
            tempObj.css('height', value + 'px');
        }
    });

    /**
     *       
     */
    var setShow = (function (tempObj, value) {
        if (isDefine(value)) {
            tempObj.css('display', value ? 'block' : 'none');
        }
    });

    /**
     *     (    )
     * @param tempObj  : Object
     * @param top      : number
     * @param left     : number
     */
    var setOffset = (function (tempObj, top, left) {
        tempObj.css({
            top : top + 'px',
            left: left + 'px'
        });
    });

    /**
     *   Top
     * @param tempObj  : Object
     * @param top      : number
     */
    var setTop = (function (tempObj, top) {
        tempObj.css({
            top: top + 'px'
        });
    });

    /**
     *  Left
     * @param tempObj  : Object
     * @param left     : number
     */
    var setLeft = (function (tempObj, left) {
        tempObj.css({
            left: left + 'px'
        });
    });

    return {
        /**
         *     
         */
        common  : baseClass,
        /**
         *     
         */
        self    : {
            setWidth : setWidth,
            setHeight: setHeight,
            setShow  : setShow,
            isDefine : isDefine,
            setOffset: setOffset,
            setTop   : setTop,
            setLeft  : setLeft
        },
        /**
         *      ID NAME
         */
        dMapId  : dMapId,
        dMapName: dMapName
    };
});

D.js
/**
 * @Author Dike.Li
 * @Date 2015/9/11
 * @class D
 * @public
 * @Description  DikeJs core component
 */
define(function (require) {
    var baseClass = require('BaseClass');
    var _superSelf = baseClass.self;
    var dMapId = baseClass.dMapId;
    var dMapName = baseClass.dMapName;

    /**
     *   ID NAME    
     */
    var get = (function (value) {
        if (_superSelf.isDefine(dMapId[value])) {
            return dMapId[value];
        } else if (_superSelf.isDefine(dMapName[value])) {
            return dMapName[value];
        }
    });

    var d = {
        get: get
    }
    return d;
});