如何获取Dijit.Tree条目的ID?

时间:2011-07-12 13:56:18

标签: javascript dojo

我有一个Dijit.Tree控件写为标记代码。 现在,我正在使用onload事件处理程序浏览div.dijitTreeRow(通过dojo.query)元素并向其添加img - 标记。

编辑:要清楚,我真的想将img - 标签添加到行中,因为我打算将它们用作操作按钮(带有onclick事件)。

然而,在img - 标签中,我需要先前通过json传递给树的元素ID。我想要HTML属性id

使用商店检查标签不是一个选项,因为它会在重复的条目上死亡。

覆盖树方法也不是一种选择,因为我非常希望尽可能长时间地进行标记。

那么,我该如何获取ID?

2 个答案:

答案 0 :(得分:1)

嗯,从div.dijitTreeRow开始,您可以访问与div.dijitTreeNode窗口小部件对应的dijit._TreeNode,而dijit.Tree.item窗口小部件将item存储在其TreeStoreModel中属性。抓住它后,您可以使用div.dijitTreeNode方法检索所需的ID。要从DOM节点(dijit._TreeNode)进入Dijit小部件(dijit.byNode()),请使用// Given rowNode is your div.dijitTreeRow... var treeNode = dijit.byNode(rowNode.parentNode); var item = treeNode.item; var id = model.getIdentity(item);

dijit.Tree

但是,这不是解决问题的正确方法。你基本上搞乱了小部件的内部,你的代码必然会在意外的情况下随机破坏,如果你以后需要升级你的Dojo版本,你的概率会更高。

您真正想要的是继承getIconClass/Style窗口小部件并提供您自己的getLabelClass/StylegetRowClass/Style和/或_createTreeNode,并通过CSS添加您的图片。为什么你说覆盖方法不是一种选择?

如果您需要比CSS可以获得的更多自定义(例如,您希望向每个树节点添加按钮或操作),您可以覆盖dijit.Tree的{​​{1}}方法和子类{ {1}}或当场自定义。然后,请记住方法和类的开头的下划线意味着它们是私有的,因此在更高版本的Dojo中可能会发生变化。

我建议您查看dijit._TreeNodethese excellent教程的来源,了解如何创建Tree.js小部件的子类。

答案 1 :(得分:0)

j105rob在Dojo IRC频道上的回答(Kudos!)。

最简单的方法是覆盖dijit.Tree类并覆盖_createNode以满足需要。 将自定义事件连接到节点可能会杀死DnD功能。