Spark.Components.List 包含可变内容:Flex 4、AS3



我在 Flex 4/AS3 中编写了以下内容,但它没有按预期工作。

所以,我想知道我的代码是否有问题......我会解释一下:

TileTest.mxml

<s:Application minWidth="955" minHeight="600" creationComplete="createButtons()"
<fx:Script>
    <![CDATA[
        import Object.TestButton;
        import mx.collections.ArrayList;
        private var _names:Array = ["one", "two", "three"]; 
        public function createButtons():void
        {
            var buttons:ArrayList = new ArrayList();
            for(var a:int = 0; a < _names.length; a++)
            {
                var testButton:TestButton = new TestButton();
                    testButton.customName = _names[a];
                buttons.addItem(testButton);
            }
            myList.dataProvider = buttons;
        }
    ]]>
</fx:Script>
<s:VGroup gap="12" width="100%">
    <s:Label text="Options" fontSize="18" fontWeight="bold" color="#333333" />
    <s:List width="100%" height="100%" id="myList" itemRenderer="Object.TestButton" borderVisible="false">
        <s:layout>
            <s:TileLayout orientation="rows" columnWidth="290" rowHeight="90" columnAlign="left" horizontalGap="0" verticalGap="0" />
        </s:layout>
    </s:List>
</s:VGroup>
</s:Application>

这是我的应用程序。在这里,我有一个名为myList的列表,我在其中加载了一些TestButton。我为循环中的每个按钮设置了一个名称。

测试按钮

<s:Group width="300" height="90" click="{ Alert.show(_name); }"
<fx:Script>
    <![CDATA[
        import mx.controls.Alert;
        private var _name:String = "just a test...";
        public function set customName(newName:String):void
        {
            _name = newName;
            Alert.show(_name);
            this.addEventListener(MouseEvent.MOUSE_OVER, function():void{ Alert.show(_name); });
        }
    ]]>
</fx:Script>
<s:BorderContainer accentColor="#000000" width="100%" height="100%" />
</s:Group>

如您所见,我在此组件中有三个警报...我这样做是为了让我们理解这个问题。

  • 第一个警报发生在我设置自定义名称时,该警报发生在应用程序中,如前所示。

  • 第二个应该发生在 Mouse_Over,因为事件侦听器已添加到 Group 元素。

  • 第三个警报应该发生在 单击组 元素。

现在,如果我运行生成的 swf,我会看到屏幕中的所有三个按钮和三个警报,每个警报对应于应用程序设置的自定义名称,它会提醒正确的名称。

如果我将鼠标放在任何按钮上,它不会提醒任何消息。

如果我单击任何按钮,它会提醒设置为 _name 属性的默认消息,即"只是一个测试...">

我不明白问题是什么,因为我希望它总是提醒应用程序为每个按钮设置的名称。另外,我不想更改组件...我要说的是,我希望有一个带有私有字符串的列表和测试按钮。

如果问题出在这些特定的实现中,那么除了更改它之外,我别无他法......

谢谢大家!

问题是您的数据提供程序中有一个TestButton列表,而不仅仅是纯数据。这些按钮被创建,这就是您看到正确的警报消息的原因。

因此,Flex 会看到一个包含三个项目的列表,因此它会创建三个额外的TestButtons来呈现列表中的数据。但这些TestButtons是全新的,其属性具有默认值。

若要解决此问题,最好仅在数据提供程序 ArrayList 中具有数据,并且通过项呈现器的 data 属性访问它。

相关内容

  • 没有找到相关文章

最新更新