Fancytree:如何从ext-table获取内容

时间:2015-07-15 20:11:19

标签: javascript fancytree

我(第一次)使用fancytree。它似乎非常适合我的问题,但有一个问题我坚持下去。

我正在使用表扩展来让用户向树的节点添加其他信息。最后,我想将整个树转换为一些JSON并将其发送到服务器。

到目前为止我的代码看起来像这样:

function readTree(tree) {
    var d = tree.toDict(true, function(node){
        console.log('looking at ' + node.title);
        var tdList = $('tr.fancytree-active>td');
        /* read the attributes */
        node.attr = { 
            ctime : tdList.eq(2).find("input").val(),
            filesize : tdList.eq(3).find("input").val(),
            user : tdList.eq(4).find("input").val(),
            group : tdList.eq(5).find("input").val(),
            permissions : tdList.eq(6).find("input").val()
        };
    });
    console.log(d);
}

问题是,在树遍历期间,“fancytree-active”未添加到当前遍历的节点。

所以我的问题可以制定: 我怎样才能在toDict()回调的上下文中访问给定节点的html-object?

如果这是不可能的,除了阅读整个tr并手工提取之外,还有另一种阅读树的方法吗?

2 个答案:

答案 0 :(得分:1)

在遍历期间,您可以通过<tr>访问节点node.tr,因此您的代码可能会像这样(未经测试):

var tdList = $(">td", node.tr);

答案 1 :(得分:0)

由于mar10的答案,我找到了一个解决方案。

function readTree(tree) {
    /* first: store all attributes in a map (accessible with the key) */
    window.mapKeytoAttr = {}; 

    tree.visit(function(node) {
        var tdList = $(">td", node.tr);
        attrs = { 
            mime : tdList.eq(1).find("input").val(),
            ctime : tdList.eq(2).find("input").val(),
            filesize : tdList.eq(3).find("input").val(),
            user: tdList.eq(4).find("input").val(),
            group: tdList.eq(5).find("input").val(),
            permissions: tdList.eq(6).find("input").val()
        };
        window.mapKeytoAttr[node.key] = attrs;
    }); 

    /* second: use treeToDict() as before, but read attributes from the map */
    var d = tree.toDict(true, function(node) {
        node["attrs"] = window.mapKeytoAttr[node.key];
    }); 
    return d;
}

说明:如上所述,在toDict()回调中,每个节点只有3个值可用:titlekeyfolder。但是当您使用visit()而不是toDict()时,您可以访问完整的节点对象。所以我的解决方案所做的是,它首先在普通树遍历期间收集所有属性,并将其存储在mapKeytoAttr映射中。 然后在第二轮中,我使用toDict()从该地图中抓取属性。

@ mar10:fancytree是一款非常好的软件!