当我有商店项目ID时获取dojo节点

时间:2010-01-05 11:38:49

标签: dojo

我有dijit.Tree使用JSON填充ItemFileReadStore。由于我们的设置,每次单击树节点时我都需要执行新请求。树正在使用cookie来记住哪些文件夹被扩展而不是,所以这不是问题。但我正在尝试将焦点设置为被点击的节点。

我设法通过在网址中将其ID设置为参数来从商店模型中获取商品:

store.fetchItemByIdentity({identity:openNode, onItem:focusOpenNode(item)});
function focusOpenNode(item) {
    //I've got the item, now how do I get the node so I can do:
    var node = getNodeFromItem(item); //not a real method...
    treeControl.focusNode(node);
}

但我似乎找不到从项目ID获取匹配节点的方法。

2 个答案:

答案 0 :(得分:4)

创建treeControl时,作为构造函数参数中的一个参数传入或使用dojo.mixin添加到树控件:

/*tree helper function to get the tree node for a store item*/
getNodeFromItem: function (item) {  
    return this._itemNodesMap[item.name[0]];
}

(使用树的商店getAttribute来获取项目的名称会更简洁 - 但这个例子没有被抛光。)

然后你可以这样做:

function focusOpenNode(item) {
    //I've got the item, now how do I get the node so I can do:

    var node = treeControl.getNodeFromItem(item); //now a real method...
    treeControl.focusNode(node);
}

答案 1 :(得分:0)

很好的答案,我已经以各种方式看到了这一点,但这是最简单的(也是最好的)。

由于我正在使用控件,我不得不稍微修改它。

我使用this._itemNodesMap[item.name[0]]

而不是this._itemNodesMap[item.id]