Полагаю, что "динамически построенный" означает, что вы динамически генерируете элементы DOM для элементов дерева. Тогда вы сможете зарегистрировать обработчик событий DOMAttrModified
для тега <treechildren>
и прослушать изменения атрибута label
ячеек дерева.
Однако обычный подход состоит в том, чтобы дерево было полностью динамичным. Вам нужен объект, реализующий nsITreeView
(см. https://developer.mozilla.org/En/NsITreeView).. Вы назначаете этот объект свойству tree.view
. И этот объект определяет, сколько строк имеет ваше дерево, что отображать в какой ячейке, какие свойства строки / столбец / ячейка должны иметь все, без каких-либо узлов DOM внутри <treechildren>
. К сожалению, это сложный интерфейс для реализации, особенно из-за иерархической природы деревьев. Однако если у вас простой список, многие методы становятся тривиальными.
Два метода особенно интересны. isEditable()
позволяет определить, должна ли конкретная ячейка дерева быть редактируемой. И setCellText()
вызывается всякий раз, когда ячейка была отредактирована.
Если вы не хотите переопределять nsITreeView, обертка по умолчанию также должна быть возможной. Примерно так:
var oldView = tree.view;
var newView = {
__proto__: oldView,
setCellText(row, col, value)
{
oldView.setCellText(row, col, value);
alert("Text changed for a tree cell!");
}
};
tree.view = newView;