list组件

Posted lvsally

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了list组件相关的知识,希望对你有一定的参考价值。

1 创建元素,创建元素的父节点为传入id的下一个兄弟节点,并且为组件元素指定唯一的class(List_bs_sign) 创建方式如下
adElm:function(a,b){var e=$C(a,b);this.appendChild(e);return $(e)},//可解决先$C再innerhtml的内存泄露问题
appendTo:function(o){o.appendChild(this);return this},
bbElm:function(a,b){var e=$C(a,b);this.insertAdjacentElement("beforeBegin",e);return $(e)},
abElm:function(a,b){var e=$C(a,b);this.insertAdjacentElement("afterBegin",e);return $(e)},
————》aeElm:function(a,b){var e=$C(a,b);this.insertAdjacentElement("afterEnd",e);return $(e)},
beElm:function(a,b){var e=$C(a,b);this.insertAdjacentElement("beforeEnd",e);return $(e)}

WT.UI.List_bs = function(j) {
    var $ = WT.$;
    var me = this;
    me.selElm = null;
    me.items = null;
    var defHead = [{
        txt: \'\',
        type: \'incr\',
        w: 20
    }, {
        txt: \'\',
        type: \'checkbox\',
        w: 20
    },{
        txt:\'\',
        type:\'icon\',
        w:20
    },{
        txt:\'\',
        type:\'content\',
        w:100
    },{
        txt:\'\',
        type:\'save\',
        w:20
    }];
    me.comType = \'List_bs\'; //增加反射
    WT.ext(me, WT.Util);
    var _args = {
        p: $DB,
        ifIncr: false, //是否有自增列
        ifCheckBox: false, //是否有选择checkbox
        ifIcon:false,
        ifSave:false,
        headOption: {
            txt: \'\',
            w: null
        },
        defHead:defHead,
        items: [],
        onClick: me._fn
    };
    me.args = me.initArgs(j, _args);
    me.items = me.get(\'items\');
    me.base = me.get(\'p\').adElm(\'\', \'div\').cn(\'list_bs bg_1 b_65 dn List_bs_sign\'); //所有弹出组件放在z1
    me.ajaxData = function(apiName, param, cbFn) {};
    me.loadData = function() {};
    me.setVal = function(v) {
        for (var i = 0, l = me.items.length; i < l; i++) {
            var _it = me.items[i];
            if (_it.val === v) {
                var _tr = me.base.find(\'table\')[0].rows[i];
                if (me.selElm) {
                    me.items[me.selElm.y].ifSelect = null;
                    changeTrColor(me.selElm.elm.pn(), _tr);
                } else {
                    changeTrColor({}, _tr);
                }
                _it.ifSelect = true;
                me.selElm = {
                    elm: _tr.find(\'td\')[0],
                    idx: _it.idx,
                    val: _it.val,
                    txt: _it.txt,
                    x: 0,
                    y: i
                };
                break;
            }
        }
        return me.selElm;
    };
    me.render = function(a) {
        a = (a instanceof Array) ? a : me.items;
        me.base.h(\'\');
        var _tbody = me.base.adElm(\'\', \'table\').ac(\'fs14 c_25\');
        var _cg = _tbody.adElm(\'\', \'colgroup\');
        if (me.get(\'ifIncr\')) _cg.adElm(\'\', \'col\').attr(\'width\', me.get(\'defHead\')[0].w + \'px;\');
        if (me.get(\'ifCheckBox\')) _cg.adElm(\'\', \'col\').attr(\'width\', me.get(\'defHead\')[1].w + \'px\');
        if (me.get(\'ifIcon\')) _cg.adElm(\'\', \'col\').attr(\'width\', me.get(\'defHead\')[2].w + \'px\');
        if (me.get(\'ifSave\')) {
            _cg.adElm(\'\', \'col\').attr(\'width\', me.get(\'defHead\')[3].w + \'px\');
            _cg.adElm(\'\', \'col\').attr(\'width\', me.get(\'defHead\')[4].w + \'px\');
        }

        for (var i = 0, l = a.length; i < l; i++) { //循环TD
            var _it = a[i];
            var _tr = WT.$(_tbody.insertRow(i));
            _tr.attr(\'idx\', _it.idx); //.attr(\'tabindex\',1);
            _tr.attr(\'val\', _it.val);
            var _tdAry = [];
            if (me.get(\'ifIncr\')) {
                _tdAry.push(\'<td>\' + (i + 1) + \'</td>\');
            }
            if (me.get(\'ifCheckBox\')) {
                _tdAry.push(\'<td><input type="checkbox" \' + (_it.ifSelect ? \'checked\' : \'\') + \'/></td>\');
            }
            if (me.get(\'ifIcon\')) {
                _tdAry.push(\'<td> <img src=\'+ _it.imgSrc +\' /> </td>\');
            }
            var _td = _it.txt.length<10 ? \'<td>\' + _it.txt + \'</td>\' : \'<td title="\'+_it.txt+\'">\' + _it.txt + \'</td>\';//当内容超过15个字符会有title
            _tdAry.push(_td);

            if (me.get(\'ifSave\')) {
                _tdAry.push(\'<td> <img opt="save" isSelect=\'+_it.isSelect+\' src=\'+ _it.save +\' /> </td>\');
            }
            _tr.h(_tdAry.join(\'\'));

            if (_it.ifSelect) {
                me.selElm = {
                    elm: _tr.chr(0),
                    idx: _it.idx,
                    val: _it.val,
                    txt: _it.txt,
                    x: 2,
                    y: i
                };
                changeTrColor({}, _tr);
            }
        }

        _tbody.evt(\'mousedown\', function(e) {
            var e = WT.e.fix(e),
                _e = e.t;
            e.stop();
            while (_e.tagName != \'TABLE\') {
                if (_e.tagName === \'TD\') {
                    if (me.selElm) {
                        if (a[me.selElm.y]) a[me.selElm.y].ifSelect = null;
                        changeTrColor(me.selElm.elm.pn(), _e.pn());

                    } else {
                        changeTrColor({}, _e.pn());
                    }

                    var rIdx = _e.pn().rowIndex;
                    me.selElm = {
                        elm: _e,
                        items: a[rIdx],
                        idx: +_e.pn().attr(\'idx\'),
                        val: a[rIdx].val,
                        txt: a[rIdx].txt,
                        x: _e.cellIndex,
                        y: rIdx
                    };
                    a[rIdx].ifSelect = true;
                }
                _e = _e.pn();
            }
            if (!me.get(\'ifSave\')) {
                me.hide();
            }
            me.get(\'onClick\')(me.selElm);
        });
    }
    var changeTrColor = function(tr1, tr2) {
        for (var i in tr1.cells) {
            if (tr1.cells[i].tagName === \'TD\') WT.$(tr1.cells[i]).dc(\'bc_opt1\');
        }
        for (var i in tr2.cells) {
            if (tr2.cells[i].tagName === \'TD\') WT.$(tr2.cells[i]).ac(\'bc_opt1\');
        }
    }
    var fliterFn = function() {}
    me.init = function() {

    }
    if (arguments.length) {
        me.init();
    }
}
View Code

2 在document下添加全局mousedown事件,查找所有class为List_bs_sign并删除所有

            var oListBs = document.querySelectorAll(\'.List_bs_sign\');
            for(var i=0; i<oListBs.length; i++){
                if (_e.nextSibling || _e.nextElementSibling!== oListBs[i]){
                    $(oListBs[i]).r();
                }
            }

 技巧

1 需要了解鼠标事件的顺序,应该先是mousedown-》click——》doubleclick;那么在全局使用mousedown削掉所有的弹框,然后再用click new新的list组件这样就不会删掉刚创建的组建了。

2 用js创建类似‘类’的结构,可以在每个组件dom结构创建时create一个div,作为base元素,然后控制base,使base具有,show,hide,remove等方法,最后在创建这些组件的时候将这些公用方法扩展到组件中。

扩展函数
\'
ext\': function (target, src) { if(!src || !target) return null; for (var i in src) { if (src.hasOwnProperty(i)){ target[i] = src[i]; } } return target; }

 

WT.Util = {
    _fn: function() {},
    r: function() {
        this.base.r();
    },
    get: function(k) {
        return this.args[k];
    },
    set: function(k, v) {
        this.args[k] = v;
        return v;
    },
    show: function() {
        if (this.get(\'tips_mask\')) {
            if (WT.$(\'tips_mask\')) WT.$(\'tips_mask\').show()
        }
        this.base.show();
    },
    hide: function() {
        if (this.get(\'tips_mask\')) {
            if (WT.$(\'tips_mask\')) WT.$(\'tips_mask\').hide()
        }
        this.base.hide();
    },
    initArgs: function(oArgs, nArgs) {
        var _args = oArgs || {};
        for (var i in nArgs) {
            if (_args[i] == null) {
                _args[i] = nArgs[i];
            } else {
                if (i == \'p\' || i == \'pBody\') {
                    _args[i] = WT.$(_args[i]);
                }
            }
        }
        return _args;
    }
};
View Code

 

以上是关于list组件的主要内容,如果未能解决你的问题,请参考以下文章

react1

TP5报如下的错误 Indirect modification of overloaded element of thinkpaginatorCollection has no effect(代码片段

微信小程序代码片段

常见的代码片段

如何膨胀由 Android Studio 向导在 Activity 中创建的片段(列表)?

如何阻止片段一直弹出到根片段? [导航组件]