Что ж, из div.dijitTreeRow
вы можете получить доступ к div.dijitTreeNode
, который соответствует виджету dijit._TreeNode
, который, в свою очередь, будет иметь dijit.Tree.item
, хранящийся в его свойстве item
. Получив его, вы можете использовать методы TreeStoreModel
для получения нужного идентификатора. Чтобы перейти от узла DOM (div.dijitTreeNode
) к виджету Dijit (dijit._TreeNode
), используйте dijit.byNode()
.
// Given rowNode is your div.dijitTreeRow...
var treeNode = dijit.byNode(rowNode.parentNode);
var item = treeNode.item;
var id = model.getIdentity(item);
НО, это не правильный подход к проблеме. По сути, вы запутались во внутреннем устройстве виджета, и ваш код обречен на случайный сбой в непредвиденных ситуациях и с большей вероятностью, если вам позже понадобится обновить версию Dojo.
Что вам действительно нужно, так это создать подкласс виджета dijit.Tree
и предоставить свои собственные getIconClass/Style
, getLabelClass/Style
и/или getRowClass/Style
и добавить свои изображения через CSS. Почему вы говорите, что переопределение методов не вариант?
Если вам нужно больше настроек, чем вы можете получить с помощью CSS (например, вы хотите добавить кнопки или действия к каждому узлу дерева), вы можете переопределить метод _createTreeNode
для dijit.Tree
и либо подкласс dijit._TreeNode
, либо настроить его на месте. Опять же, имейте в виду, что подчеркивание в начале как метода, так и класса означает, что они закрыты и, следовательно, могут быть изменены в более поздних версиях Dojo.
Я бы посоветовал вам взглянуть на исходники Tree.js
и этих отличные учебные пособия для указателей на то, как создать подкласс виджета _TreeNode
.
person
Gustavo Giráldez
schedule
12.07.2011