我有一个Dijit.Tree控件写为标记代码。
现在,我正在使用onload事件处理程序浏览div.dijitTreeRow
(通过dojo.query
)元素并向其添加img
- 标记。
编辑:要清楚,我真的想将img
- 标签添加到行中,因为我打算将它们用作操作按钮(带有onclick事件)。
然而,在img
- 标签中,我需要先前通过json传递给树的元素ID。我不想要HTML属性id
!
使用商店检查标签不是一个选项,因为它会在重复的条目上死亡。
覆盖树方法也不是一种选择,因为我非常希望尽可能长时间地进行标记。
那么,我该如何获取ID?
答案 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/Style
,getRowClass/Style
和/或_createTreeNode
,并通过CSS添加您的图片。为什么你说覆盖方法不是一种选择?
如果您需要比CSS可以获得的更多自定义(例如,您希望向每个树节点添加按钮或操作),您可以覆盖dijit.Tree
的{{1}}方法和子类{ {1}}或当场自定义。然后,请记住方法和类的开头的下划线意味着它们是私有的,因此在更高版本的Dojo中可能会发生变化。
我建议您查看dijit._TreeNode
和these excellent教程的来源,了解如何创建Tree.js
小部件的子类。
答案 1 :(得分:0)
j105rob
在Dojo IRC频道上的回答(Kudos!)。
最简单的方法是覆盖dijit.Tree
类并覆盖_createNode
以满足需要。
将自定义事件连接到节点可能会杀死DnD功能。