Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > e4xu

Всякие разные штуки сомнительной полезности сделанные в свободное от работы время.
Оценить эту запись

insertChildBefore() и insertChildAfter()

Запись от wvxvw размещена 03.04.2009 в 17:19
Обновил(-а) wvxvw 03.04.2009 в 17:23

Столкнулся с одной очень неприятной вещью: оказалось, что добабляя элементы XML'я используя эти два метода, при том, что исходный элемент уже является частью XML'я, куда вы его хотите добавить, элемент будет скопирован не по значению, а по ссылке. На первый взгляд может показаться, что это не принципиально... но... последствия на самом деле очень нехорошие.
Во-первых, все компоненты, будь то mx или fl, так или иначе использующие концепцию itemRenderer'ов выдадут вам совсем не те результаты, которых вы ожидаете, а в некоторых ситуациях просто перестанут функционировать.
Вот простой пример:
Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
	<mx:Script>
		<![CDATA[
		private function addAnotherNode():void
		{
			provider.insertChildAfter(provider.*[0], provider.*[0]);
		}
		]]>
	</mx:Script>
	<mx:XML id="provider">
		<root>
			<a>foo</a>
			<a>bar</a>
		</root>
	</mx:XML>
	<mx:List dataProvider="{provider.a}" width="100" />
	<!-- click on this button few times and try to select 
	the topmost "foo" item. You'll see you can select only the last <a>foo</a>
	where all the rest of <a>foo</a>'s are "invisible" to list functions -->
	<mx:Button label="addAnotherNode" click="addAnotherNode()"/>
</mx:Application>
Как вы сами понимаете, List компонент лежит в основе целого семейства компонентов - DataGrid, AdvancedDataGrid, OLAPDataGrid, Tree, ComboBox и т.д. и все они так или иначе будут глючить, если вы попытаетесь провести с их dataProvider'ом описаную выше операцию.

Во-вторых: ели вам нужно после добавления элемента XML'я найти, куда же вы его добавили, то вместо одного, вы можете обнаружить, что таких элементов может быть 2 и больше... в такой ситуации поиск по XMLList становится нереализуемым в принципе т.как все без исключения свойства двух и больше объектов списка будут одинаковыми...

Резюме: о баге сообщил. Жду реакции, а пока - просто не используйте insertChildBefore() и insertChildAfter() с этими компонентами.
http://bugs.adobe.com/jira/browse/ASC-3706
(заодно, можете и проголосовать)
Размещено в Frameworkless MXML
Комментарии 0 Отправить другу ссылку на эту запись
Всего комментариев 0

Комментарии

 

 


Часовой пояс GMT +4, время: 14:05.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.