Actionscript 3 在此itemrenderer中使用“删除”按钮创建dropdownlist
我使用Flex4.5,我喜欢创建一个自定义的dropdownlist。事实上,我想在我的下拉列表的每一行显示一个标签和一个删除按钮。 目标是在单击删除按钮时删除该行。 这看起来很简单,但我不知道怎么做Actionscript 3 在此itemrenderer中使用“删除”按钮创建dropdownlist,actionscript-3,apache-flex,air,flash-builder,Actionscript 3,Apache Flex,Air,Flash Builder,我使用Flex4.5,我喜欢创建一个自定义的dropdownlist。事实上,我想在我的下拉列表的每一行显示一个标签和一个删除按钮。 目标是在单击删除按钮时删除该行。 这看起来很简单,但我不知道怎么做 感谢您的帮助,对于这一点,您必须跳过一些障碍,因为DropDownList可以阻止任何MouseeEvent。从ItemRenderer内的对象中单击 第一件事:您需要一个自定义事件才能使其工作。携带物品或至少其索引的物品。e、 g: public class ItemEvent extends
感谢您的帮助,对于这一点,您必须跳过一些障碍,因为DropDownList可以阻止任何
MouseeEvent。从ItemRenderer内的对象中单击
第一件事:您需要一个自定义事件才能使其工作。携带物品或至少其索引的物品。e、 g:
public class ItemEvent extends Event {
public static const REMOVE:String = "itemRemove";
public var item:MyClass;
public function ItemEvent(type:String, item:MyClass,
bubbles:Boolean=false,
cancelable:Boolean=false) {
super(type, bubbles, cancelable);
this.item = item;
}
override public function clone():Event {
return new ItemEvent(type, item, bubbles, cancelable);
}
}
然后创建一个带有“删除”按钮的自定义ItemRenderer,该按钮将分派此事件
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
<![CDATA[
private function remove():void {
owner.dispatchEvent(
new ItemEvent(ItemEvent.REMOVE, data as MyClass)
);
}
]]>
</fx:Script>
<s:Label id="labelDisplay" verticalCenter="0" left="10" />
<s:Button verticalCenter="0" right="10" width="16" height="16"
mouseDown="remove()" />
</s:ItemRenderer>
下面是如何侦听该自定义事件并删除所选项目:
myDropDownList.addEventListener(ItemEvent.REMOVE, removeSelectedItem);
private function removeSelectedItem(event:ItemEvent):void {
var items:IList = myDropDownList.dataProvider;
var index:int = items.getItemIndex(event.item);
items.removeItemAt(index);
}
因为我们没有单击myDropDownList,而是按下了鼠标。selectedIndex
属性仍将位于以前选择的项目(如果没有选择,则为-1)。这就是我们需要自定义事件的原因,因为没有其他方法可以知道您要删除哪个项目。对于此项目,您必须跳过一些限制,因为DropDownList可以防止触发任何MouseeEvent。从ItemRenderer内的对象单击
第一件事:您需要一个自定义事件才能使其工作。携带物品或至少其索引的物品。e、 g:
public class ItemEvent extends Event {
public static const REMOVE:String = "itemRemove";
public var item:MyClass;
public function ItemEvent(type:String, item:MyClass,
bubbles:Boolean=false,
cancelable:Boolean=false) {
super(type, bubbles, cancelable);
this.item = item;
}
override public function clone():Event {
return new ItemEvent(type, item, bubbles, cancelable);
}
}
然后创建一个带有“删除”按钮的自定义ItemRenderer,该按钮将分派此事件
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
<![CDATA[
private function remove():void {
owner.dispatchEvent(
new ItemEvent(ItemEvent.REMOVE, data as MyClass)
);
}
]]>
</fx:Script>
<s:Label id="labelDisplay" verticalCenter="0" left="10" />
<s:Button verticalCenter="0" right="10" width="16" height="16"
mouseDown="remove()" />
</s:ItemRenderer>
下面是如何侦听该自定义事件并删除所选项目:
myDropDownList.addEventListener(ItemEvent.REMOVE, removeSelectedItem);
private function removeSelectedItem(event:ItemEvent):void {
var items:IList = myDropDownList.dataProvider;
var index:int = items.getItemIndex(event.item);
items.removeItemAt(index);
}
因为我们没有单击myDropDownList,而是按下了鼠标。selectedIndex
属性仍将位于以前选择的项目(如果没有选择,则为-1)。这就是我们需要自定义事件的原因,因为没有其他方法知道要删除哪个项目。创建一个itemRenderer以在下拉列表中显示delete按钮和标签。然后单击按钮时,弹出一个事件,您可以使用该事件从数据提供程序中删除该项。谢谢您的回答。但你能给我一个代码样本来做吗?Thanks@www.Flextras.com不起作用:DropDownList阻止按钮的点击触发。然而,鼠标下移并没有被阻止。但是列表的selectedIndex尚未设置。请创建一个itemRenderer以在下拉列表中显示delete按钮和标签。然后单击按钮时,弹出一个事件,您可以使用该事件从数据提供程序中删除该项。谢谢您的回答。但你能给我一个代码样本来做吗?Thanks@www.Flextras.com不起作用:DropDownList阻止按钮的点击触发。然而,鼠标下移并没有被阻止。但是列表的selectedIndex还没有设置。谢谢你的回答,我会测试它。谢谢你的回答,我会测试它