当我有存储项id时获取dojo节点

当我有存储项id时获取dojo节点,dojo,Dojo,我有一个dijit.Tree,它由使用JSON的ItemFileReadStore填充。由于我们的设置,每次单击树节点时,我都需要执行一个新请求。树使用cookies来记住哪些文件夹已展开,哪些未展开,所以这不是问题。但我正在尝试将焦点设置为单击的节点 我已通过将其id设置为url中的一个参数,成功地从商店模型中获取该项目: store.fetchItemByIdentity({identity:openNode, onItem:focusOpenNode(item)}); function f

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

我已通过将其id设置为url中的一个参数,成功地从商店模型中获取该项目:

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获取匹配节点的方法。

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

/*tree helper function to get the tree node for a store item*/
getNodeFromItem: function (item) {  
    return this._itemNodesMap[item.name[0]];
}
(使用树的store 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);
}

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

/*tree helper function to get the tree node for a store item*/
getNodeFromItem: function (item) {  
    return this._itemNodesMap[item.name[0]];
}
(使用树的store 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);
}

回答得很好,我见过很多种方法,但这是最简单(也是最好的)

由于我使用控件的方式,我不得不对它进行一些修改


我使用了
而不是
这个。_itemNodesMap[item.name[0]]
这个。_itemNodesMap[item.id]

很好的答案,我看到了很多方法,但这是最简单(也是最好的)的方法

由于我使用控件的方式,我不得不对它进行一些修改


我用
这个来代替
这个.u itemNodesMap[item.name[0]
,我用
这个.u itemNodesMap[item.id]

Sweeet!我希望我能给你多张赞成票。工作起来很有魅力。在treeControl上添加自定义函数是个好主意,有助于稍微清理代码!我希望我能给你多张赞成票。工作起来很有魅力。在treeControl上添加自定义函数是个好主意,这有助于稍微清理代码。