如何在包含itemrenderer的flex spark列表中更改dataprovider?

时间:2012-03-13 12:50:07

标签: list flex itemrenderer flex-spark dataprovider

在flex 4.5中,我有一个应用程序,它有一个BorderContainer,用于加载一个spark列表(mxml样式 - _myList,borderContainer存储在父应用程序之外的库中),它使用itemRenderer加载一个arrayCollection(我应该注意)所述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并根据一个新的arrayCollection火花列表重新分配dataProvider而不会崩溃?也许这与我的itemRenderer有关?我应该先杀掉它吗?

我是使用高级itemRenderers的新手。这里有一个示例:

http://flexponential.com/2009/09/23/deleting-items-in-a-list-from-an-item-renderer/

它会做(我想要它做什么)(如果不是使用removeItemAt,我使用removeAll(),并且在所有提到的组件之外更改列表框值会启动函数而不是单击在项目渲染器本身内)除了它是内联渲染器而我的不是。我不知道如何从包含我的列表的borderContainer访问deleteItem()函数。

非常感谢任何指导!

1 个答案:

答案 0 :(得分:1)

  

有没有人对如何最好地清除以前的内容有任何建议   dataProvider并基于new重新分配dataProvider   arrayCollection的火花列表没有崩溃?

这应该有效:

myList.dataProvider = myNewDataProvider;

如果您只想更新dataProvider中的单个项目,可以对其进行更新,然后在集合上调用itemUpdated()以强制渲染器进行刷新。

  

也许这与我的itemRenderer有关?我可以做   先杀了那个?

您的itemRenderer与它有任何关系是值得怀疑的,但是如果没有看到它背后的代码,很难肯定地说。您可能想详细说明应用崩溃时究竟发生了什么。你得到运行时错误吗?或者是其他东西?