В flex 4.5 у меня есть приложение, в котором есть BorderContainer, который загружает список искр (стиль mxml - _myList, а borderContainer хранится в библиотеке вне родительского приложения), который загружает массив arrayCollection с itemRenderer (я должен отметить, Указанный itemRenderer не является встроенным средством визуализации - при выборе элемента в списке itemRenderer расширяется, загружает определенный элемент управления в средство визуализации элементов на основе данных, переданных из выбранного элемента в списке) и позволяет пользователю выполнять поиск. Это все работает хорошо при запуске / загрузке, пока я не попытаюсь изменить dataProvider для списка (мое приложение позволяет пользователям переключать источники данных, которые затем создают новый dataProvider с новыми переменными). Я пробовал:
//app crashes
_myList.dataProvider.removeAll();
//app crashes
_myList.dataProvider = new ArrayCollection();
_myList.dataProvider = acNew;(the new array collection to populate the list)
//app doesn't crash, but I can't get to any of the global variables upon
//re-creation at the parent app level (even though I assigned it an id)
//so this is causing more headaches than I wanted
this.removeElement(_myList);
var searchList:SearchNew = new SearchNew();
searchList.percentWidth = 100;
searchList.percentHeight = 100;
searchList.id = "_myList";
searchList.setStyle("fontFamily","MyriadNoCFF");
searchList.g_appName = this.g_appName;
searchList.g_sessionID = this.g_sessionID;
searchList.g_TableID = this.g_tableID;
searchList.g_targetedLayer = this.g_tName;
searchList.g_testAC = new ArrayCollection();
searchList.g_item = <item/>;
searchList.g_req = <req/>;
searchList.g_sub_req = <req/>;
searchList.g_prev_where = <where/>;
searchList.g_prev_ws = <w/>;
searchList.g_breadcrumbsAC = new ArrayCollection();
searchList.g_controlType = "";
searchList.itemRenderer = new ClassFactory(myItemRenderer);
searchList.dataProvider = acNew;
this.addElement(searchList);
Я пытался _myList.dataGroup.invalidateDisplayList () ;, (_myList.dataProvider as ArrayCollection) .refresh (); ..... ничего из этого не работает, и приложение просто продолжает падать.
Есть ли у кого-нибудь совет о том, как наилучшим образом очистить предыдущий dataProvider и переназначить dataProvider на основе нового массива. Возможно, это как-то связано с моим itemRenderer? Должен ли я убить это первым?
Я новичок в использовании продвинутых itemRenderers. Здесь есть образец:
http://flexponential.com/2009/09/23/deleting-items-in-a-list-from-an-item-renderer/
это будет делать (вроде) то, что я хочу (если вместо использования removeItemAt я использую removeAll (), и изменение значения списка вне всех упомянутых компонентов запускает функцию вместо щелчка внутри самого рендерера элементов), за исключением того, что это встроенный рендер, а мой нет. Я не знаю, как бы я получил доступ к функции deleteItem () из borderContainer, содержащего мой список.
Любое руководство будет с благодарностью!