как изменить провайдера данных в списке гибких свечей, в котором есть элементы itemrederers? - PullRequest
0 голосов
/ 13 марта 2012

В 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, содержащего мой список.

Любое руководство будет с благодарностью!

1 Ответ

1 голос
/ 13 марта 2012

Есть ли у кого-нибудь совет о том, как лучше убрать предыдущий dataProvider и переназначить dataProvider на основе нового arrayCollection искрового списка БЕЗ его падения?

Это должно работать:

myList.dataProvider = myNewDataProvider;

Если вы хотите обновить только один элемент в dataProvider, вы можете обновить его, а затем вызвать itemUpdated () в коллекции, чтобы принудительно обновить средство визуализации.

Возможно, это как-то связано с моим itemRenderer? Должна ли я быть убить это первым?

Сомнительно, что ваш itemRenderer как-то связан с этим, однако, не видя кода, стоящего за ним, трудно сказать наверняка. Возможно, вы захотите уточнить, что именно происходит, когда ваше приложение падает. Вы получаете ошибку во время выполнения? Или что-то другое?

...