带有ItemRenderer的spark列表单击功能不起作用

时间:2011-02-09 15:56:00

标签: flex actionscript-3 air flex4

我的ItemRenderer存在问题,我将其用于Spark列表。我的代码如下:

我有这个清单:

<s:List 
    id="productSetList" 
    dataProvider="{ model.productSets }" 
    change="model.selectSet( productSetList )" 
    height="100%" width="100%"
    borderVisible="false" 
    itemRenderer="SideBarItemRenderer" top="20" left="15">
</s:List>

我的itemRenderer是:

<s:ItemRenderer 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/halo" 
    width="160" height="175" autoDrawBackground="false" buttonMode="true" useHandCursor="true"
    click="click(event)" cacheAsBitmap="true"
    >


    <fx:Script>
        <![CDATA[
            import com.png.vm.model.vos.ProductSet;

            protected function click(event:MouseEvent):void
            {
                trace('arthur');
            }

        ]]>
    </fx:Script>

    <s:BitmapImage source="{ProductSet(data).image}" width="160" height="175"/>

</s:ItemRenderer>

问题是,如果我滚动列表,然后点击一个项目,它就不会追踪'亚瑟'!为什么会这样?我必须追踪有人在列表中点击的所有时间!

修改 如果我删除列表中的change="model.selectSet( productSetList )",它就可以了!但我不能删除,一些建议?如何将其切换到另一个功能?

2 个答案:

答案 0 :(得分:1)

跟踪仅在您调试/使用Flash Player的调试版本时有效。确保你使用它。如果您想要弹出消息,请使用Alert.show("message")

有关trace()的更多信息,请查看: http://livedocs.adobe.com/flex/3/html/help.html?content=logging_08.html

和Alert.show():http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00001965.html


如果您正在运行调试播放器。尝试以这种方式从嵌入式<s:Group>发起click事件,无论您在位图之外添加什么,都会触发点击事件。

类似的东西:

<s:Group width="100%" height="100%" click="click(event)" >
    <s:BitmapImage source="{ProductSet(data).image}" width="160" height="175"/>
</s:Group>

我确实在

之前在ItemRenderers中为我提供了点击事件

答案 1 :(得分:0)

道歉,我终于解决了。问题是函数内部model.selectSet,我正在调用List.change;我搞砸了这个名单!我的功能如下:

    public function selectSet(list:List):void {
        list.layout.verticalScrollPosition=100;
        // another stuffs

    }

所以,我刚删除了这一行:list.layout.verticalScrollPosition=100;现在它正常工作。

感谢您的帮助!