zoukankan      html  css  js  c++  java
  • easyui源码翻译1.32--ComboGrid(数据表格下拉框)

    前言

    扩展自$.fn.combo.defaults和$.fn.datagrid.defaults。使用$.fn.combogrid.defaults重写默认值对象。下载该插件翻译源码

    数据表格下拉框结合了可编辑文本框控件和下拉数据表格面板控件,该控件允许用户快速查找和选择,并且该控件提供了键盘导航支持,对行进行筛选

    源码

     

    /**
     * jQuery EasyUI 1.3.2
     * 
     *翻译:qq 1364386878 下拉表格
     */
    (function ($) {
    
        function create(jq) {
            var options = $.data(jq, "combogrid").options;
            var grid = $.data(jq, "combogrid").grid;
            $(jq).addClass("combogrid-f");
            $(jq).combo(options);
            var panel = $(jq).combo("panel");
            if (!grid) {
                grid = $("<table></table>").appendTo(panel);
                $.data(jq, "combogrid").grid = grid;
            }
            //
            grid.datagrid($.extend({}, options, {
                border: false,
                fit: true,
                singleSelect: (!options.multiple),
                onLoadSuccess: function (_6) {
                    var remainText = $.data(jq, "combogrid").remainText;
                    var remainText = $(jq).combo("getValues");
                    _setValues(jq, remainText, remainText);
                    options.onLoadSuccess.apply(jq, arguments);
                },
    
                onClickRow: onClickRow,
                onSelect: function (rowIndex, rowData) {
                    retrieveValues();
                    options.onSelect.call(this, rowIndex, rowData);
                },
                onUnselect: function (rowIndex, rowData) {
                    retrieveValues();
                    options.onUnselect.call(this, rowIndex, rowData);
                },
                onSelectAll: function (rows) {
                    retrieveValues();
                    options.onSelectAll.call(this, rows);
                },
                onUnselectAll: function (rows) {
                    if (options.multiple) {
                        retrieveValues();
                    }
                    options.onUnselectAll.call(this, rows);
                }
            }));
    
            function onClickRow(rowIndex, row) {
                $.data(jq, "combogrid").remainText = false;
                retrieveValues();
                if (!options.multiple) {
                    $(jq).combo("hidePanel");
                }
                options.onClickRow.call(this, rowIndex, row);
            };
    
            function retrieveValues() {
                var remainText = $.data(jq, "combogrid").remainText;
                var rows = grid.datagrid("getSelections");
                var vv = [], ss = [];
                for (var i = 0; i < rows.length; i++) {
                    vv.push(rows[i][options.idField]);
                    ss.push(rows[i][options.textField]);
                }
                if (!options.multiple) {
                    $(jq).combo("setValues", (vv.length ? vv : [""]));
                } else {
                    $(jq).combo("setValues", vv);
                }
                if (!remainText) {
                    $(jq).combo("setText", ss.join(options.separator));
                }
            };
        };
        //选择行
        function selectRow(jq, step) {
            var options = $.data(jq, "combogrid").options;
            var grid = $.data(jq, "combogrid").grid;
            var length = grid.datagrid("getRows").length;
            if (!length) {
                return;
            }
            $.data(jq, "combogrid").remainText = false;
            var index;
            var rows = grid.datagrid("getSelections");
            if (rows.length) {
                index = grid.datagrid("getRowIndex", rows[rows.length - 1][options.idField]);
                index += step;
                if (index < 0) {
                    index = 0;
                }
                if (index >= length) {
                    index = length - 1;
                }
            } else {
                if (step > 0) {
                    index = 0;
                } else {
                    if (step < 0) {
                        index = length - 1;
                    } else {
                        index = -1;
                    }
                }
            }
            if (index >= 0) {
                grid.datagrid("clearSelections");
                grid.datagrid("selectRow", index);
            }
        };
        //设置值
        function _setValues(jq, values, remainText) {
            var options = $.data(jq, "combogrid").options;
            var grid = $.data(jq, "combogrid").grid;
            var rows = grid.datagrid("getRows");
            var ss = [];
            for (var i = 0; i < values.length; i++) {
                var index = grid.datagrid("getRowIndex", values[i]);
                if (index >= 0) {
                    grid.datagrid("selectRow", index);
                    ss.push(rows[index][options.textField]);
                } else {
                    ss.push(values[i]);
                }
            }
            if ($(jq).combo("getValues").join(",") == values.join(",")) {
                return;
            }
            $(jq).combo("setValues", values);
            if (!remainText) {
                $(jq).combo("setText", ss.join(options.separator));
            }
        };
        //查询
        function _query(jq, q) {
            var options = $.data(jq, "combogrid").options;
            var grid = $.data(jq, "combogrid").grid;
            $.data(jq, "combogrid").remainText = true;
            if (options.multiple && !q) {
                _setValues(jq, [], true);
            } else {
                _setValues(jq, [q], true);
            }
            if (options.mode == "remote") {
                grid.datagrid("clearSelections");
                grid.datagrid("load", $.extend({}, options.queryParams, { q: q }));
            } else {
                if (!q) {
                    return;
                }
                var rows = grid.datagrid("getRows");
                for (var i = 0; i < rows.length; i++) {
                    if (options.filter.call(jq, q, rows[i])) {
                        grid.datagrid("clearSelections");
                        grid.datagrid("selectRow", i);
                        return;
                    }
                }
            }
        };
        //实例化组件
        $.fn.combogrid = function (target, parm) {
            if (typeof target == "string") {
                var method = $.fn.combogrid.methods[target];
                if (method) {
                    return method(this, parm);
                } else {
                    return $.fn.combo.methods[target](this, parm);
                }
            }
            target = target || {};
            return this.each(function () {
                var state = $.data(this, "combogrid");
                if (state) {
                    $.extend(state.options, target);
                } else {
                    state = $.data(this, "combogrid", {
                        options: $.extend({},
                            $.fn.combogrid.defaults,
                            $.fn.combogrid.parseOptions(this),
                            target)
                    });
                }
                create(this);
            });
        };
        //下拉表格默认方法
        $.fn.combogrid.methods = {
            //返回属性对象
            options: function (jq) {
                var options = $.data(jq[0], "combogrid").options;
                options.originalValue = jq.combo("options").originalValue;
                return options;
            },
            //返回数据表格对象
            grid: function (jq) {
                return $.data(jq[0], "combogrid").grid;
            },
            //返回数据表格对象
            setValues: function (jq, values) {
                return jq.each(function () {
                    _setValues(this, values);
                });
            },
            //设置组件值
            setValue: function (jq, value) {
                return jq.each(function () {
                    _setValues(this, [value]);
                });
            },
            //设置组件值
            clear: function (jq) {
                return jq.each(function () {
                    $(this).combogrid("grid").datagrid("clearSelections");
                    $(this).combo("clear");
                });
            },
            //重置
            reset: function (jq) {
                return jq.each(function () {
                    var options = $(this).combogrid("options");
                    if (options.multiple) {
                        $(this).combogrid("setValues", options.originalValue);
                    } else {
                        $(this).combogrid("setValue", options.originalValue);
                    }
                });
            }
        };
        //解析器
        $.fn.combogrid.parseOptions = function (target) {
            var t = $(target);
            return $.extend({}, $.fn.combo.parseOptions(target),
                $.fn.datagrid.parseOptions(target),
                $.parser.parseOptions(target, ["idField", "textField", "mode"]));
        };
        $.fn.combogrid.defaults = $.extend({}, $.fn.combo.defaults,
            $.fn.datagrid.defaults, {
                loadMsg: null,//在数据表格加载远程数据的时候显示消息
                idField: null,//ID字段名称
                textField: null,//ID字段名称
                //定义在文本改变的时候如何读取数据网格数据。设置为'remote',
                //数据表格将从远程服务器加载数据。当设置为'remote'模式的时候,用户输入将会发送到名为'q'的http请求参数,向服务器检索新的数据。
                mode: "local",
    
                keyHandler: {
                up: function () {
                        selectRow(this, -1);
                    },
                    down: function () {
                        selectRow(this, 1);
                    },
                    enter: function () {
                        selectRow(this, 0);
                        $(this).combo("hidePanel");
                    },
                    query: function (q) {
                        _query(this, q);
                    }
                },
                //定义在'mode'设置为'local'的时候如何选择本地数据,返回true时则选择该行
                filter: function (q, row) {
                var options = $(this).combogrid("options");
                return row[options.textField].indexOf(q) == 0;
            }
        });
    })(jQuery);
    View Code

    示例代码

     

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>ComboGrid Actions - jQuery EasyUI Demo</title>
        <link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
        <link rel="stylesheet" type="text/css" href="../../themes/icon.css">
        <link rel="stylesheet" type="text/css" href="../demo.css">
        <script type="text/javascript" src="../../jquery-1.8.0.min.js"></script>
        <script type="text/javascript" src="../../jquery-1.8.0.min.js"></script>
        <script src="../../plugins2/jquery.parser.js"></script>
        <script src="../../plugins2/jquery.validatebox.js"></script>
        <script src="../../plugins2/jquery.panel.js"></script>    
        <script src="../../plugins2/jquery.resizable.js"></script>
        <script src="../../plugins2/jquery.linkbutton.js"></script>
        <script src="../../plugins2/jquery.pagination.js"></script>
        <script src="../../plugins2/jquery.combo.js"></script>
        <script src="../../plugins2/jquery.datagrid.js"></script>
        <script src="../../plugins2/jquery.combogrid.js"></script>
    </head>
    <body>
        <h2>ComboGrid Actions</h2>
        <div class="demo-info">
            <div class="demo-tip icon-tip"></div>
            <div>Click the buttons below to perform actions.</div>
        </div>
        <div style="margin:10px 0">
            <a href="javascript:void(0)" class="easyui-linkbutton" onclick="getValue()">GetValue</a>
            <a href="javascript:void(0)" class="easyui-linkbutton" onclick="setValue()">SetValue</a>
            <a href="javascript:void(0)" class="easyui-linkbutton" onclick="disable()">Disable</a>
            <a href="javascript:void(0)" class="easyui-linkbutton" onclick="enable()">Enable</a>
        </div>
        <input id="cc" class="easyui-combogrid" style="250px" data-options="
                panelWidth: 500,
                idField: 'itemid',
                textField: 'productname',
                url: '../combogrid/datagrid_data1.json',
                columns: [[
                    {field:'itemid',title:'Item ID',80},
                    {field:'productname',title:'Product',120},
                    {field:'listprice',title:'List Price',80,align:'right'},
                    {field:'unitcost',title:'Unit Cost',80,align:'right'},
                    {field:'attr1',title:'Attribute',200},
                    {field:'status',title:'Status',60,align:'center'}
                ]],
                fitColumns: true
            ">
        <script type="text/javascript">
            function getValue(){
                var val = $('#cc').combogrid('getValue');
                alert(val);
            }
            function setValue(){
                $('#cc').combogrid('setValue', 'EST-13');
            }
            function disable(){
                $('#cc').combogrid('disable');
            }
            function enable(){
                $('#cc').combogrid('enable');
            }
        </script>
    </body>
    </html>
    View Code

    插件效果

    热爱编程,热爱技术,热爱生活
  • 相关阅读:
    uboot的仓库在哪里?
    git如何查看执行过的历史git命令
    for(;;)和while(true)的区别
    CountDownLatch的理解和使用
    countDownLatch
    websocket @ServerEndpoint(value = "/websocket/{ip}")详解
    Java原子性操作之——Atomic包的原理分析
    CAS原理
    java线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束!!!
    ThreadPoolExecutor 线程池Demo
  • 原文地址:https://www.cnblogs.com/DemoLee/p/3495938.html
Copyright © 2011-2022 走看看