>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Не получается добавить двойной клик на элементе дерева, как сделать? http://forum.mozilla-russia.org/viewtopic.php?id=52788 |
xterro > 11-12-2011 18:18:44 |
Доброго времени суток, на форм лежит tree, нужно по двойному нажатию по ветке выполнять своё действие. Обработчик на событие вешаю динамически: Выделить код Код:function makeTreeItem(text, group) { group = group || false; var treeitem = document.createElement("treeitem"); var treerow = document.createElement("treerow"); var treecell = document.createElement("treecell"); treecell.setAttribute("label", text); treecell.setAttribute("src", "images/user.png"); if(group) { treecell.setAttribute("properties", "group"); treecell.setAttribute("src", "images/group.png"); treeitem.setAttribute("container", "true"); } else { treeitem.addEventListener("dblclick", onTreeItemDoubleClick, false); // доб. обработчик двойного нажатия } treeitem.appendChild(treerow); treerow.appendChild(treecell); return treeitem; } Это функция добавления элемента в дерево, но почему-то когда я кликаю по ветке, ничего не происходит
Сама функция формирования дерева: Выделить код Код:function loadTree() { var tree = document.getElementById("treeUserList"); var treechildren = document.createElement("treechildren"); tree.appendChild(treechildren); var groups = []; var currentGroup = null; for(var i in someData) { // данные для дерева var user = someData[i]; for(var j in groups) { if(user.group == groups[i]) { currentGroup = groups[i]; break; } } if(currentGroup) { // group exists, adding user var group = findGroup(tree, user.group); if(group) { var item = makeTreeItem(user.name); group.appendChild(item); } } else { groups = groups.concat([user.group]); // creating a new group var group = makeTreeItem(user.group, true); treechildren.appendChild(group); // add user to group var child = document.createElement("treechildren"); group.appendChild(child); var item = makeTreeItem(user.name); child.appendChild(item); } currentGroup = null; } } |
hydrolizer > 11-12-2011 19:15:58 |
Обработчики пользовательских событий обычно вешают на treechildren. |
xterro > 11-12-2011 20:28:58 |
hydrolizer пишет
На самый верхний в дереве? А как мне определять по какой веке я кликаю, т.е как мне отличать что я кликнул по ветке а не по группе(у группу установлен атрибут: container=true)? |
hydrolizer > 12-12-2011 03:44:06 |
xterro пишет
Через tree selection (nsITreeSelection), и далее обращением к нужным методам модели дерева. У вас дерево контентное, однако для него часть интерфейса модели реализуется автоматически. И, тем не менее, я все-таки советую изучить, как делаются деревья на основе своей реализации nsITreeView (здесь, здесь, здесь) - контентные деревья мало используемы из-за проблем с производительностью при достаточно большом количестве элементов, и из-за того, что своя реализация nsITreeView дает намного большую гибкость в управлении деревом и данными дерева. |
xterro > 12-12-2011 07:56:04 |
hydrolizer |