Fancytree:如何一次发送一个事件完成多个选择

时间:2018-01-27 06:52:23

标签: javascript jquery fancytree

我将Fancytree用于我的项目。

以下源矩阵

https://jsfiddle.net/middle536/spwsvsoz/

source: [
        {title: "Folder 1", folder: true, keyid: "id1"},
        {title: "Folder 2", folder: true, keyid: "id1,id2"},
        {title: "Folder 3", folder: true, keyid: "id1,id3", children: [
            {title: "Node 3.1"},
            {title: "Node 3.2"}
        ]},
        {title: "Folder 4", folder: true, keyid: "id3"}
    ],

我有一个数组。见上面的源矩阵。 每个文件夹都有多个keyid。 此示例选择使用#button1的所有keyid = id2。 选择了两个文件夹。 Fancytree将发送选择2次(见警报)。

如果选择3个文件夹或节点。 Fancytree将发送这些选择3次。

这会导致我的代码出现故障。

以下是我的代码

$(function(){
$("#tree").fancytree({
    checkbox: true,
    ...
    source: {source },

    extensions: ["edit", "table", "gridnav","childcounter","filter"],

    select: function(event, data) {

            //Here have a jquery datatable update function.
            //When #button1 click function do multi selection
            //the jquery datatable will alert error message.

    },

    table:....
})

$("#button1").click(function(){
    var key_ids = new Array();
    var nodeList = new Array();
        $("#tree").fancytree("getTree").visit(function(node){
            if(typeof node.data.keyid != "undefined"){
                key_ids = node.data.keyid.split(",");
                for (var i = 0; i < key_ids.length; i++) {
                    if(key_ids[i] == 'id2'){
                        //node.setSelected(true);//this do multi select multi times
                        //alert(key_ids);
                        nodeList.push(node);
                    }
                }
            }
        });
        nodeList.setSelected(true);//this do multi select one time, but can't work.
});

问题是......

我知道nodeList.setSelected(true);是错误的语法。 这个想法是多节点选择一次。 多节点不是多次选择。 怎么做?

1 个答案:

答案 0 :(得分:0)

your comment here开始,我假设在这种情况下你只需要一个警报。 这与Fancytree无关,因为正在发送'event'(由'alert()'调用标记。

但是,您可以更改代码以收集所有匹配项,然后立即发送:

var i, key_ids,
    nodeList = [];

$("#tree").fancytree("getTree").visit(function(node){
  if( node.data.keyid ){
    key_ids = node.data.keyid.split(",");
    for (i = 0; i < key_ids.length; i++) {
      if(key_ids[i] === 'id2'){
        node.setSelected(true);
        nodeList.push(node);
      }
    }
  }
});
alert($.map(nodeList, function(o){ return o.title; }).join(", "));