【问题标题】:Adobe Flex - List Component - How Can You Allow Multiple Selections (allowMultipleSelection) Based Off A Max Number Of Selections AllowedAdobe Flex - 列表组件 - 如何根据允许的最大选择数允许多个选择 (allowMultipleSelection)
【发布时间】:2012-09-28 14:11:55
【问题描述】:

在列表组件中,如何允许多个选择,但允许的最大选择数量基于预定义的数量?

到目前为止我得到的是......我首先定义了最大选择数:

私有变量 numberOfYearsCanSelect:int = 3;

我在列表组件中设置了 allowMultipleSelection = true。

在更改列表组件时,我添加了逻辑以查看用户选择的内容是否超过了他们允许选择的内容,如果是,我将 selectedItems 的长度设置为他们可以选择的最大数量:

            if (event.currentTarget.selectedIndices.length > numberOfYearsCanSelect)
            {
                var arr:Vector.<Object>=event.currentTarget.selectedItems;
                arr.length=numberOfYearsCanSelect;
                event.currentTarget.selectedItems=arr;
            }

问题在于,由于某种原因,当我设置 selectedItems 时列表没有更新。它允许您选择所需的数量。

我想要发生的是,当用户选择的数量超过允许的数量时,我们只选择那个数字,其余的不选择。

也许我需要对视图进行某种列表刷新以使其工作,或者我应该通过扩展列表类并覆盖某些方法来创建自定义列表?

谢谢

【问题讨论】:

    标签: apache-flex list actionscript datagrid flash-builder


    【解决方案1】:

    在我看来,子类化List 将是最简单的解决方案。然后,您所要做的就是确保当建议的选定项的数量超过最大值时永远不会提交用户选择。

    这样的事情应该可以解决问题:

    use namespace mx_internal;
    
    public class LimitedList extends List {
    
        public var maxSelectedItems:int = 3;
    
        override public function initialize():void {
            super.initialize();
            allowMultipleSelection = true;
        }
    
        override mx_internal function setSelectedIndices(
                value:Vector.<int>,
                dispatchChangeEvent:Boolean = false,
                changeCaret:Boolean = true):void
        {
            if (!value || value.length <= maxSelectedItems)
                super.setSelectedIndices(value, dispatchChangeEvent, changeCaret);
        }
    
    }
    

    当然,需要做一些调整才能使其成为完全可重用的组件,但您可以将其用作起点(或一次性)。

    【讨论】:

    • 完美运行,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2022-10-16
    • 2013-06-14
    • 1970-01-01
    • 2018-11-27
    • 2019-12-04
    • 1970-01-01
    • 2019-12-11
    • 2011-07-26
    相关资源
    最近更新 更多