0

剣道 UI コントロールを使用してプロジェクトを行っています。プロジェクトの左側に「treeview」、右側に「kendogrid」が配置されています。

ここで私の要件は、ツリービュー ノードに基づいてグリッドをフィルター処理することであり、複数選択を行う必要があります。

例: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

のハンドラーは次changeのことtreeを行う必要があります。

  1. 選択されたチェックボックスを取得します。
  2. チェックされたチェックボックスのフィルター条件を作成します。
  3. フィルターを DataSource に適用します。

何かのようなもの:

$("#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 に答える