首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态添加ItemRenderer组件

动态添加ItemRenderer组件
EN

Stack Overflow用户
提问于 2011-06-21 23:30:39
回答 1查看 557关注 0票数 0

我有一个列表,它的所有项目都有TextInput作为itemRenderers。在应用程序启动时,项目会正确地呈现在TextInputs中。数据是从对象数组中填充的。

我想要的是,在ItemRenderers中填充数据之后,我希望有一个额外的项目呈现器(当然是textInput )...so,如果用户想要输入另一个项目,他可以将其放在额外的textInput中。

我还想在每次用户添加新项并在新添加的项上点击ENTER时添加额外的itemRenderer。

下面是我的itemRenderer,还有clearTxt_enterHandler handler..but,我想知道如何在"Enter“时添加另一个itemRenderer。

有人能指导我做这个吗?

Thx

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<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/mx" 
                autoDrawBackground="true" xmlns:components="components.*" width="100%">

    <s:layout> 
        <s:HorizontalLayout/> 
    </s:layout> 

    <fx:Script>http://stackoverflow.com/questions/4199373/flex-4-is-a-good-practice-store-the-loaded-bitmapdata-in-a-value-object-and-then
        <![CDATA[


            import mx.events.FlexEvent;

            import skins.ClearableTextInputSkin;

            override public function set data( value:Object ) : void {
                super.data = value;
                //clearTxt.text = value.label;
            }

            protected function clearTxt_enterHandler(event:FlexEvent):void
            {
                trace("On Enter");

            }

        ]]>
    </fx:Script>

    <components:ClearableTextInput text="{data.label}" id="clearTxt"
                                   skinClass="skins.ClearableTextInputSkin" enter="clearTxt_enterHandler(event)" left="10" top="36" width="220" />

</s:ItemRenderer>

这是我的列表,来自主应用程序:

代码语言:javascript
复制
<s:List id="myList" itemRenderer="renderers.TextInputRenderer" dataProvider="{xxx}" width="100%">
        <s:layout>
            <s:TileLayout requestedRowCount="2"columnAlign="justifyUsingWidth"/>
        </s:layout>
    </s:List>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-22 00:04:08

在ItemRenderer中,调度一个事件以请求新的ItemRenderer。一定要让它冒泡,这样它就会一直上升到拥有ItemRenderer的列表中。

代码语言:javascript
复制
protected function clearTxt_enterHandler(event:FlexEvent):void
{
    dispatchEvent(new Event("myCustomRequestEvent", true));
    //replace with a real custom Event; this is for brevity
}

在List组件上侦听该事件,在处理程序中只需向其dataprovider添加一个新元素(可能标签为空)。

代码语言:javascript
复制
myList.addEventListener("myCustomRequestEvent", addRow);

private function addRow(event:Event):void {
    myList.dataProvider.addItem({label: null});
    //replace anonymous object with your class
}

这将向列表中添加一个新项目。在您的示例中,您可能必须将requestRowCount绑定到列表中的项数,以便在添加项时它会增长。

代码语言:javascript
复制
<s:VerticalLayout requestedRowCount="{myList.dataprovider.length}" />

顺便说一句:你为什么要使用TileLayout?如果您想要的是每个项目有两个输入框,那么您应该在一个ItemRenderer中放置两个TextInputs并使用VerticalLayout。它会让你的生活变得轻松许多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6427916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档