我有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获取匹配节点的方法。
答案 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]