如何使用moduleloader标记加载flex模块作为列表itemrenderers?

时间:2009-11-02 12:47:39

标签: flex3 module itemrenderer

我有一个与extrunal itemrenderer组成的列表。我的itemrender是一个我想在运行时加载的模块。

我使用了moduleloader标签,但它没有显示anthing。如果我不使用moduleloader标记,而<modulename>而不是<productsView:menuBtn>则显示内容。

有谁知道我应该怎么做?

带有列表组件的应用程序文件

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
 layout="vertical"
 initialize="catagories.send();">

<mx:HTTPService id="catagories" url="data/products.xml"
            resultFormat="e4x"/>

<mx:XMLListCollection id="myXC"
        source="{catagories.lastResult.product}"/>

<mx:List id="r" dataProvider="{myXC}" 
     width="185" height="100%" 
     backgroundAlpha="0"
     paddingTop="0"
     paddingBottom="0"
     paddingLeft="0"
     paddingRight="0"
     borderStyle="none">
     <mx:itemRenderer>
      <mx:Component>
       <mx:ModuleLoader url="productsView/menuBtn.swf"/>
      </mx:Component>
     </mx:itemRenderer>
    </mx:List>
</mx:Application>

我的模块

<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" 
 layout="horizontal"
 width="185" 
    paddingLeft="3"
 paddingRight="3"
 paddingTop="3"
 paddingBottom="3"
 backgroundColor="#FFFFFF"
 backgroundAlpha="0.8"
 borderStyle="solid">

 <mx:Image id="labelIcon" source="{data.icon}"/>
 <mx:Label id="catagory" text="{data.catagory}"/>
</mx:Module>

1 个答案:

答案 0 :(得分:0)

问题可能是您无法加载模块的多个实例。解决这个问题的方法是通过更改URL来使Flex认为每次调用都是唯一的。

尝试用

替换ModuleLoader代码

<mx:ModuleLoader url="{'module.swf?' + Math.round(Math.random() * 10)}"/>