Просмотр полной версии : Компонент 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
Ну, хорошо: а если всё-таки один?
а по-простому положить в атрибуты нодов дерева хоть 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 :-(
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, респект! Огромное спасибо!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.