2012-03-13 22 views
0

在Flex 4.5中,我有一个应用程序,它具有一个加载spark列表(mxml样式 - _myList,borderContainer存储在父应用程序之外的库中)的BorderContainer,它使用itemRenderer加载arrayCollection(我应该注意说itemRenderer不是内联渲染器 - 在选择列表中的项目时,itemRenderer展开,根据从列表中所选项目传递的数据在项目渲染器中加载特定的控件,并允许用户执行搜索。这在启动/加载时运行良好,并且很好,直到我尝试更改列表的dataProvider(我的应用程序允许用户切换数据源,然后使用新变量创建新的dataProvider)。我曾尝试:如何更改具有itemrenderers的柔性火花列表中的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为ArrayCollection的).REFRESH(); .....都未工作,只是应用不断崩溃。

有没有人有任何建议如何最好地清除以前的dataProvider和重新分配dataProvider基于一个新的listCollection火花列表没有它崩溃?也许这与我的itemRenderer有关?我应该先把它杀掉吗?

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

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

,会做(种)我想要它做的(如果不是使用removeItemAt,我用的removeAll(),和一个列表框的值以外的变化所提及的所有组件都会启动该功能,而不是在项目渲染器本身内进行单击),不同之处在于它是内联渲染器,而我不是。我不知道如何从包含我的列表的borderContainer访问deleteItem()函数。

任何指导将不胜感激!

+0

当你说应用程序崩溃,你可以提供一些细节?你有运行时错误吗?如果是这样,错误是什么? – JeffryHouser 2012-03-13 13:17:01

+0

没有运行时错误....没有记录错误(我有我的功能在try/catch)...只是一个灰色的厄运屏幕。它被挂起,没有迹象表明为什么。 – jeep 2012-03-13 13:23:06

回答

1

有没有人对如何最好地清除掉以前 dataProvider,并将重新分配基于新 的ArrayCollection火花列表,而它崩溃的dataProvider什么建议吗?

这应该工作:

myList.dataProvider = myNewDataProvider; 

如果你只是想在数据提供程序更新单个项目就可以更新它,然后调用itemUpdated()上集合,迫使渲染刷新。

也许这与我的itemRenderer有关?我应该是 先杀掉那个?

令人怀疑你的itemRenderer与它有什么关系,但是如果没有看到背后的代码,很难肯定地说。您可能需要详细说明应用程序崩溃时发生的情况。你有运行时错误吗?或者是其他东西?

+0

我可以发布代码,但它很可怕!我也没有收到运行时错误。我也有一个try/catch函数,它不会返回错误...只是挂起。我不想更新数据提供者中的单个项目,我想完全切换出整个dataProvider。 – jeep 2012-03-13 13:25:42

+0

在应用程序挂起后,当我在Google Chrome上运行调试控制台时,应用程序将释放挂起,但dataProvider不会更改。 – jeep 2012-03-13 13:33:07

+0

你应该浏览你的代码,看看你是否可以构建一个“简单”样本来突出显示问题。然后与我们分享。渲染器中可能存在无限循环。这是没有运行时错误的最可能的挂起原因。 – JeffryHouser 2012-03-13 13:35:35