0

我正在使用 Kendo UI 控件做一个项目。在项目左侧“treeview”和右侧“kendogrid”放置。

这里我的要求是根据treeview节点过滤网格,需要做多选。

例如:eg:10249,10248 基于此节点过滤网格。

这是我的小提琴:http: //jsfiddle.net/RHh67/7/

这是尝试过的代码:

var tree= $("#treeview").kendoTreeView({
    checkboxes: {
        checkChildren: true
    },

    dataSource: [{
        id: 1, text: "My Project", expanded: true, spriteCssClass: "rootfolder", items: [
            {
                id: 2, text: "OrderID", expanded: true, spriteCssClass: "folder", items: [
                { id: 3, text: "10248"  },
                { id: 4, text: "10249"  },
                { id: 5, text: "10250" },
                { id: 6, text: "10251" },
                { id: 7, text: "10252" }
            ]
        }]
    }]
}).data("kendoTreeView");

tree.dataSource.bind("change", function (e) {
    var ds = $("#grid").data("kendoGrid").dataSource;
    ds.filter([
        {"logic":"or",
            "filters":[
                {
                    "field":"OrderId",
                    "operator":"eq",
                }
            ]}
    ]);
});

谁能帮我找出我到底错在哪里?

4

1 回答 1

5

changeon 的处理程序tree应该做:

  1. 获取选中的复选框。
  2. 为勾选的复选框构建过滤条件。
  3. 将过滤器应用于数据源。

就像是:

$("#treeview").on("change", function (e) {
    var selected = $('#treeview :checked').closest('li');
    var ds = grid.dataSource;
    var filter = {
        logic  : "or",
        filters: []
    };
    $.each(selected, function (idx, elem) {
        var item = tree.dataItem(elem);
        if (parseInt(item.text)) {
            console.log("item.text", item.text);
            filter.filters.push({
                field   : "OrderID",
                operator: "eq",
                value   : parseInt(item.text)
            });
        }
    });
    console.log("filter", filter);
    ds.filter(filter);
});

跑到这里

于 2013-03-19T00:50:42.320 回答