Kendo UI treeview 的使用

本文介绍了如何在Kendo UI中使用treeview组件,结合Angular.js和k-template来展示和操作多级数据。示例代码展示了如何创建、添加、删除节点,并通过kendo-data-source和k-on-change实现数据交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kendo UI 中 Treeview 十分适合多级数据的显示与操作。

官网上的例子:

<div id="treeview"></div>
<script>
$("#treeview").kendoTreeView({
  animation: false,
  dataSource: [
    { text: "foo", items: [
      { text: "bar" }
    ] }
  ]
});
</script>


我的使用:

html页面中:(结合了Angular.js 与 k-template)

<div id ="myTree"
         kendo-tree-view ="tree"
         k-data-source ="treeData"
         k-expanded ="true"
         k-on-change ="selectedItem = dataItem">

         <div k-template>
            # if(item.isComposite) {#
            <div class="myTreeStyle" >     
                <div class="mySelect">
                    <span class="mySpan" style="color:darkcyan" ng-init='$scope.compositeTypes.name="AND"'>{{$scope.compositeTypes.name}}</span>
                    <select class="logicSelect" style="width:31px; color:darkcyan" ng-model="$scope.compositeTypes" ng-options="compositeType.name for compositeType in compositeTypes" ng-change="compositeChange($scope.compositeTypes.name,dataItem)" >
                        <option value="" disabled style="color:darkcyan; background-color:gainsboro;">- Select Logic -</option>
                    </select>
                    <span class="spanLogic"></span>
                </div>
                <a ng-click="addComposite(dataItem)" class="mybtn k-icon k-i-insert-n" data-toggle="tooltip" title="Add Group"></kendo-button>
                <a ng-click="addSingle(dataItem)"  class="mybtn k-icon k-i-insert-m" data-toggle="tooltip" title="Add Expression"></kendo-button>
                <a ng-click="remove(dataItem)" class="mybtn k-icon k-i-close" data-toggle="tooltip" title="Remove Item"></a>
            </div>

#} else {#

<div>

......

</div>

         <div k-template>


js文件中:

var filterNode = kendo.data.Node.define({
            id: null,
            logic: null,
            expanded: null,
            deep: null,
            isComposite: null,
            field: null,
            operator: null,
            value: null,
            valueType: null,
            items: null
        });

        var initFilterData = [{
            id: 0,
            logic: "and",
            expanded: true,
            deep: 0,
            isComposite: true,
            field: null,
            operator: null,
            value: null,
            valueType: null,
            items: []
        }];


$scope.treeData = new kendo.data.HierarchicalDataSource(
            {
                data: initFilterData,
                schema: {
                    model: filterNode
                }
            });


        $scope.makeItem = function (i) {
            return { id: i };
        };

        $scope.addSingle = function (dataItem) {
            var id = dataItem.id;
            var barDataItem = $scope.tree.dataSource.get(id);
            var barElement = $scope.tree.findByUid(barDataItem.uid);
            //var node = treeview.findByText("bar");
            $scope.tree.select(barElement);

            var itemId = (dataItem.deep + 1) * 1000;
            if (counter[dataItem.deep + 1]) {
                itemId = itemId + counter[dataItem.deep + 1].number;
                counter[dataItem.deep + 1].number += 1;
            } else {
                counter[dataItem.deep + 1] = { deep: dataItem.deep + 1, number: 1 };
            }

            console.log("AddS:  Deep: " + counter[dataItem.deep + 1].deep + ", Number: " + counter[dataItem.deep + 1].number + ", ID: " + itemId);

            var newItem = $scope.makeItem(itemId);
            newItem.logic = null;
            newItem.expanded = true;
            newItem.deep = dataItem.deep + 1;
            newItem.isComposite = false;
            newItem.field = initField;
            newItem.operator = initOperator;
            newItem.value = "unknow";
            newItem.valueType = initFieldType;
            newItem.items = null;
            $scope.tree.append(newItem, $scope.tree.select());
            $scope.tree.select(null);
        };

        $scope.addComposite = function (dataItem) {
            var id = dataItem.id;


            var barDataItem = $scope.tree.dataSource.get(id);
            var barElement = $scope.tree.findByUid(barDataItem.uid);
            //var node = treeview.findByText("bar");
            $scope.tree.select(barElement);

            var itemId = (dataItem.deep + 1) * 1000;
            if (counter[dataItem.deep + 1]) {
                itemId = itemId + counter[dataItem.deep + 1].number;
                counter[dataItem.deep + 1].number += 1;
            } else {
                counter[dataItem.deep + 1] = { deep: dataItem.deep + 1, number: 1 };
            }

            console.log("AddC:  Deep: " + counter[dataItem.deep + 1].deep + ", Number: " + counter[dataItem.deep + 1].number + ", ID: " + itemId);

            var newItem = $scope.makeItem(itemId);
            newItem.logic = initLogic;
            newItem.expanded = true;
            newItem.deep = dataItem.deep + 1;
            newItem.isComposite = true;
            newItem.field = null;
            newItem.operator = null;
            newItem.value = null;
            newItem.valueType = null;
            newItem.items = [];

            $scope.tree.append(newItem, $scope.tree.select());
            $scope.tree.select(null);
        };


function removeChildrenNumber(dataItem) {
            if (dataItem.isComposite) {
                for (var j = 0; j < counter.length; j++) {
                    if (dataItem.deep + 1 == counter[j].deep) {
                        counter[j].number = counter[j].number - dataItem.items.length;
                    }
                }
                for (var i = 0; i < dataItem.items.length; i++) {
                    var childItem = dataItem.items[i];
                    removeChildrenNumber(childItem);
                }
            }
        }

        $scope.remove = function (dataItem) {
            var id = dataItem.id;

            for (var i = 0; i < counter.length; i++) {
                if (dataItem.deep == counter[i].deep) {
                    console.log("Remove:  Deep: " + counter[i].deep + ", Number: " + counter[i].number + ", ID: " + id);
                    counter[i].number = counter[i].number - 1;
                    removeChildrenNumber(dataItem);
                }
            }

            var array = dataItem.parent();
            for (var i = 0; i < array.length; i++) {
                if (array[i].id == id) {
                    array.splice(i, 1);
                }
            }
        };


以上代码可实现treeview的添加、删除,细节代码未给出。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值