[restored]
Сегодня меня озадачили вопросом - как удалить узел из XML. В описании XML класса сказано, что нужно использовать delete и приведены примеры. Но как быть, если нужно удалить какойто конкретный узел (инстанс)? Скажу честно, что быстро эту задачу я решить не смог.
Рассмотрим на следующем примере, где нужно удалить выбранный узел дерева:
Если попытаемся удалить напрямую:
- delete tree.selectedItem;
то компилятор сообщает об ошибке:
1189: Attempt to delete the fixed property node. Only dynamically defined properties can be deleted.
Если попробовать так:
- var node:XML = tree.selectedItem as XML;
- delete node;
то получаем туже ошибку (что в принципе логично).
Но следующее обращение поможет удалить требуемый узел:
- var node:XML = tree.selectedItem as XML;
- delete node.parent().elements()[node.childIndex()];
Собственно это и есть решение.
Немного странный вариант, но мы обратились к требуемой ноде и удалили ее. Надеюсь есть более простые решения.
Более изящный солюшен тоже пока не нашел.
Но!
нашел вот этот страшно полезную недокументированную функцию:
XML.setNotification(handler)
вешает на ноду notificator
при чем не только на атрибуты ( как через watch), но на все изменения в дереве
сразу предупреждаю о граблях - работа отличается от addEventListener - события слушает только один (последний) заданный handler.
т.е. у дерева может быть несколько хандлеров, но по одному на ноду.
События пузырятся вверх по дереву, нода - парент всегда слышит что происходит ниже
описано здесь:
http://www.docsultant.com/site2/articles/flex_internals.html#objectproxy
Расскажите, пожалуйста, более подробно что за глюки - как они проявляются и после каких действий?