zoukankan      html  css  js  c++  java
  • kendo-ui下拉树形选择(DropDownTreeView)

    摘要:

      最近项目中有一个特殊的需求,下拉选择部门,但是部门的层级关系要在下来框中体现出来,如下图

     

    下面我就把实现的过程分享给大家,代码如下:

    dropdowntreeview.js

    /*
     *
     * DropDownTreeView
     * https://github.com/jsExtensions/kendoui-extended-api
     *
     */
    var DropDownTreeView = kendo.ui.Widget.extend({
        _uid: null,
        _treeview: null,
        _dropdown: null,
        _v: null,
    
        init: function (element, options) {
            var that = this;
    
            kendo.ui.Widget.fn.init.call(that, element, options);
    
            that._uid = new Date().getTime();
    
            $(element).append(kendo.format("<input id='extDropDown{0}' class='k-ext-dropdown'/>", that._uid));
            $(element).append(kendo.format("<div id='extTreeView{0}' class='k-ext-treeview' style='z-index:1;'/>", that._uid));
    
            // Create the dropdown.
            that._dropdown = $(kendo.format("#extDropDown{0}", that._uid)).kendoDropDownList({
                dataSource: [{ text: "", value: "" }],
                dataTextField: "text",
                dataValueField: "value",
                open: function (e) {
                    //to prevent the dropdown from opening or closing. A bug was found when clicking on the dropdown to
                    //"close" it. The default dropdown was visible after the treeview had closed.
                    e.preventDefault();
                    // If the treeview is not visible, then make it visible.
                    if (!$treeviewRootElem.hasClass("k-custom-visible")) {
                        // Position the treeview so that it is below the dropdown.
                        $treeviewRootElem.css({
                            "top": $dropdownRootElem.position().top + $dropdownRootElem.height(),
                            "left": $dropdownRootElem.position().left
                        });
                        // Display the treeview.
                        $treeviewRootElem.slideToggle('fast', function () {
                            that._dropdown.close();
                            $treeviewRootElem.addClass("k-custom-visible");
                        });
                    }
                }
            }).data("kendoDropDownList");
    
            if (options.dropDownWidth) {
                that._dropdown._inputWrapper.width(options.dropDownWidth);
            }
    
            var $dropdownRootElem = $(that._dropdown.element).closest("span.k-dropdown");
    
            // Create the treeview.
            that._treeview = $(kendo.format("#extTreeView{0}", that._uid)).kendoTreeView(options.treeview).data("kendoTreeView");
            that._treeview.bind("select", function (e) {
                // When a node is selected, display the text for the node in the dropdown and hide the treeview.
                $dropdownRootElem.find("span.k-input").text($(e.node).children("div").text());
                $treeviewRootElem.slideToggle('fast', function () {
                    $treeviewRootElem.removeClass("k-custom-visible");
                    that.trigger("select", e);
                });
                var treeValue = this.dataItem(e.node);
                that._v = treeValue[options.valueField];
            });
    
            var $treeviewRootElem = $(that._treeview.element).closest("div.k-treeview");
    
            // Hide the treeview.
            $treeviewRootElem
                .css({
                    "border"   : "1px solid #dbdbdb",
                    "display"  : "none",
                    "position" : "absolute",
                    "background-color": that._dropdown.list.css("background-color")
                });
    
            $(document).click(function (e) {
                // Ignore clicks on the treetriew.
                if ($(e.target).closest("div.k-treeview").length === 0) {
                    // If visible, then close the treeview.
                    if ($treeviewRootElem.hasClass("k-custom-visible")) {
                        $treeviewRootElem.slideToggle('fast', function () {
                            $treeviewRootElem.removeClass("k-custom-visible");
                        });
                    }
                }
            });
        },
        value: function(v){
            var that = this;
            if(v !== undefined){
                var n = that._treeview.dataSource.get(v);
                var selectNode = that._treeview.findByUid(n.uid);
                that._treeview.trigger('select',{node: selectNode});
                var $treeviewRootElem = $(that._treeview.element).closest("div.k-treeview");
                $treeviewRootElem.hide();
            }
            else{
                return that._v;
            }
        },
    
        dropDownList: function () {
            return this._dropdown;
        },
    
        treeview: function () {
            return this._treeview;
        },
        refresh: function () {
            return this._treeview.dataSource.read();
        },
        options: {
            name: "DropDownTreeView"
        }
    });
    kendo.ui.plugin(DropDownTreeView);

    index.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <link rel="stylesheet" type="text/css" href="kendo/styles/kendo.common.min.css" />
        <link rel="stylesheet" type="text/css" href="style/dropdowntreeview.css" />
    </head>
    <body>
        <script type="text/javascript" charset="utf-8" src="http://cdn.staticfile.org/jquery/2.0.0/jquery.min.js"></script>
        <script type="text/javascript" charset="utf-8" src="kendo/js/kendo.chopper.min.js"></script>
        <script type="text/javascript" charset="utf-8" src="kendo/js/kendo.chopper.min.js"></script>
        <script type="text/javascript" charset="utf-8" src="kendo/js/cultures/kendo.messages.zh-CN.js"></script>
        <script type="text/javascript" charset="utf-8" src="kendo/js/cultures/kendo.culture.zh-CN.min.js"></script>
        
        <div id="DropDownTreeView"></div>
    
        <script src="js/dropdowntreeview.js"></script>
        <script>
        var datasource = [{
                "text": "u90e8u95e8", 
                "expanded": true, 
                "id": 0, 
                "items": [
                    {
                        "text": "u8fd0u8425u90e8", 
                        "expanded": true, 
                        "pid": 0, 
                        "comments": "20140821-1", 
                        "items": [
                            {
                                "text": "u4ea7u54c1u7ec4", 
                                "expanded": true, 
                                "pid": 1, 
                                "comments": "20140821-7", 
                                "items": [], 
                                "id": 7
                            }
                        ], 
                        "id": 1
                    }, 
                    {
                        "text": "u8d22u52a1u90e8", 
                        "expanded": true, 
                        "pid": 0, 
                        "comments": "20140821-2", 
                        "items": [], 
                        "id": 2
                    }, 
                    {
                        "text": "u884cu653fu90e8", 
                        "expanded": true, 
                        "pid": 0, 
                        "comments": "20140821-3", 
                        "items": [], 
                        "id": 3
                    }, 
                    {
                        "text": "u7814u53d1u90e8", 
                        "expanded": true, 
                        "pid": 0, 
                        "comments": "20140821-4", 
                        "items": [
                            {
                                "text": "u5f00u53d1u7ec4", 
                                "expanded": true, 
                                "pid": 4, 
                                "comments": "20140821-8", 
                                "items": [], 
                                "id": 8
                            }, 
                            {
                                "text": "u6d4bu8bd5u7ec4", 
                                "expanded": true, 
                                "pid": 4, 
                                "comments": "20140821-9", 
                                "items": [], 
                                "id": 9
                            }
                        ], 
                        "id": 4
                    }, 
                    {
                        "text": "u8fd0u7ef4u90e8", 
                        "expanded": true, 
                        "pid": 0, 
                        "comments": "20140821-5", 
                        "items": [], 
                        "id": 5
                    }, 
                    {
                        "text": "u9500u552eu90e8", 
                        "expanded": true, 
                        "pid": 0, 
                        "comments": "20140821-6", 
                        "items": [
                            {
                                "text": "u552eu524du7ec4", 
                                "expanded": true, 
                                "pid": 6, 
                                "comments": "20140821-10", 
                                "items": [], 
                                "id": 10
                            }, 
                            {
                                "text": "u552eu540eu7ec4", 
                                "expanded": true, 
                                "pid": 6, 
                                "comments": "20140821-11", 
                                "items": [], 
                                "id": 11
                            }
                        ], 
                        "id": 6
                    }
                ]
            }];
            var DropDownTreeView = $('#DropDownTreeView').kendoDropDownTreeView({
                dropDownWidth : '177px',
                valueField    : 'id',
                treeview      : {
                    dataSource: datasource
                }
            }).data("kendoDropDownTreeView");
    
            console.log(DropDownTreeView.value());
    
            // 如果数据是异步获取的,可以这样设置dataSource
            // var treeDataSource = new kendo.data.HierarchicalDataSource({
            //     transport: {
            //         read:  {
            //             url: '',
            //             dataType: "json"
            //         }
            //     },
            //     schema: {
            //         data: 'data'
            //     },
            //     requestEnd:  function(e){
            //         DropDownTreeView.treeview().setDataSource(e.response.data)
            //     }
            // });
            // treeDataSource.read();
        </script>
    </body>
    </html>

    配置参数:

    属性

      类型 意义
    dataSource Array 设置数据
    dataTextField String 显示文本字段
    dataValueField String value字段
    dropDownWidth String 设置下拉输入框宽度
    treeview Object 设置树形结构选项,如datasource

    方法

    意义
    open 打开下拉框
    close 关闭下拉框
    value 获取选中元素的值
    dropDownList 获取下拉选项
    treeview 获取树形结构选项
    refresh 刷新下拉框

    附录:

      源码下载

  • 相关阅读:
    分页公共方法
    关于锁表查询的部分SQL
    将Excel中的数据绑定到DataGrid控件中
    CMMI相关信息
    图片在DataGrid中的用法
    关于standard Button和html Button之disabled属性的比较
    VS2003中链接数据库方法
    .NET多语言版本系统功能实现
    Read and Write 单一文件
    为继承masterpage的页面设置defaultbutton和defaultfocus
  • 原文地址:https://www.cnblogs.com/xiyangbaixue/p/4157096.html
Copyright © 2011-2022 走看看