Страницы: 1
Доброго времени суток, на форм лежит 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; }
Это функция добавления элемента в дерево, но почему-то когда я кликаю по ветке, ничего не происходит
<tree id="treeUserList" flex="1" treelines="true">
<treecols>
<treecol id="treecolUserName" label="Users" primary="true" flex="1"/>
</treecols>
<!-- остальные элементы здесь добавляются динамически,
поэтому тут пусто, а так наверно можно было бы тут повешать событие -->
</tree>
Сама функция формирования дерева:
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; } }
Отсутствует
Обработчики пользовательских событий обычно вешают на treechildren.
Отсутствует
Обработчики пользовательских событий обычно вешают на treechildren.
На самый верхний в дереве? А как мне определять по какой веке я кликаю, т.е как мне отличать что я кликнул по ветке а не по группе(у группу установлен атрибут: container=true)?
Отсутствует
А как мне определять по какой веке я кликаю, т.е как мне отличать что я кликнул по ветке а не по группе
Через tree selection (nsITreeSelection), и далее обращением к нужным методам модели дерева. У вас дерево контентное, однако для него часть интерфейса модели реализуется автоматически. И, тем не менее, я все-таки советую изучить, как делаются деревья на основе своей реализации nsITreeView (здесь, здесь, здесь) - контентные деревья мало используемы из-за проблем с производительностью при достаточно большом количестве элементов, и из-за того, что своя реализация nsITreeView дает намного большую гибкость в управлении деревом и данными дерева.
Отсутствует
Страницы: 1