PDA

Просмотр полной версии : Компонент Tree - Как узнать индекс открываемой ветви?


vikingcompany
16.02.2009, 17:45
Как известно, событие открытия любой ветви обрабатывается так:

var OpenNodeListener: Object = new Object();
OpenNodeListener.nodeOpen = function(evt_obj:Object)
{
...
}
myTree.addEventListener("nodeOpen", OpenNodeListener);
Подскажите пожалуйста,
как при помощи обращения к evt_obj узнать индекс (порядковый номер) открываемой ветви?

gloomyBrain
16.02.2009, 18:04
Информация об этом может содержаться в evt_obj.target

vikingcompany
16.02.2009, 18:47
А где бы раздобыть информацию о всех его свойствах?
В help`е я ничего не нашёл :-(

gloomyBrain
16.02.2009, 19:10
Ну можно, например, трейсом разобрать по косточкам этот объект:
for(item in evt_obj){
trace(item + ": "+evt_obj[item])
}
...если получится =)

vikingcompany
17.02.2009, 00:26
Получилось следующее:
target: _level0.myTree
type: nodeOpen
node: <node label="parent_1"><node label="child_1" /><node label="child_2" /></node>
И толку?

gloomyBrain
17.02.2009, 00:34
событие nodeOpen содержит свойство node, которое является ссылкой на узел, приведший к отправке события
То есть можно использовать

evt_obj.node

для получения нужного узла

ЗЫ
А про индекс все сложно, потому как никто не гарантирует, что Вы используете один уровень вложенности

vikingcompany
17.02.2009, 00:49
Ну, хорошо: а если всё-таки один?

silin
17.02.2009, 01:07
а по-простому положить в атрибуты нодов дерева хоть id, хоть что угодно , а в обработчике смотреть их чем не устраивает?

gloomyBrain
17.02.2009, 01:08
можно пройтись по всему дереву и сравнить с помощью === нод, полученный из события с каждым нодом дерева. Если вернет true - значит оно.
Но это явно не лучшее решение
А разве нет других свойств, к которым можно привязаться?

vikingcompany
17.02.2009, 01:23
Похоже, что нет.

Мне, собственно, что нужно:
чтобы при открытии разных ветвей выполнялись разные действия.
А для, этого, как я понимаю, нужно открываемую ветвь как-то идентифицировать.
Если бы при открытии она выделялась, то selectedNode.selectedIndex - и будь здоров!
Но она не выделяется. А как её ещё идентифицировать - ума не приложу.

можно пройтись по всему дереву и сравнить с помощью === нод, полученный из события с каждым нодом дерева. Если вернет true - значит оно.
Но это явно не лучшее решение
Согласен. Далеко не лучшее.

а по-простому положить в атрибуты нодов дерева хоть id, хоть что угодно ...
Вы имеете ввиду attributes.data?

gloomyBrain
17.02.2009, 01:57
Данные из которых состоит дерево. Описание узла. Туда можно включить все, что сами захотите (по сути это XML).

<node label="child_1" id="Yahooo!!! It really works!!!" />

vikingcompany
17.02.2009, 09:00
Хорошо, но как этот id прочитать?
Выуживать из <node label="child_1" id="Yahooo!!! It really works!!!" /> ?
Или есть прямое обращение через target?

gloomyBrain
17.02.2009, 14:48
я думаю, что target.node.id
к лэйблу же так идет обращение? =)

vikingcompany
17.02.2009, 21:39
Неа. По-прежнему - undefined :-(

silin
17.02.2009, 22:29
myTree.dataProvider =
"<node label='root' id='0'>"
+ "<node label='branch' id='1'>"
+ "<node label='leaf' id='2'/>"
+ "</node>"
+ "<node label='branch' id='3'>"
+ "<node label='leaf' id='4'/>"
+ "</node>"
+"</node>";


myTree.addEventListener("nodeOpen", openNodeHandler);

function openNodeHandler(obj){
var node:XMLNode=obj.node;
var id=node.attributes.id;
trace("id: "+id);
}

vikingcompany
18.02.2009, 11:08
Точно, про attributes забыл!
silin, респект! Огромное спасибо!