2012-09-28 42 views
2

在列表組件中,如何允許多個選擇,但允許的最大選擇數基於預定義數?Adob​​e Flex - 列表組件 - 如何允許多個選擇(allowMultipleSelection)基於關閉允許的最大選擇數

我得到了迄今...我首先定義選項的最大數量:

私人VAR 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。它允許你選擇多少你想要的。

我想要發生的是,當用戶選擇多於允許的內容時,我們只選擇該號碼,其餘的未選中。

也許我需要在視圖上做一些List刷新來讓它工作,或者我應該通過擴展List類並重寫一些方法來創建自定義列表?

感謝

回答

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); 
    } 

} 

當然,一些更多的調整需要做的事情,使這個完全可重複使用的組件,但你可以使用這個作爲出發點(或作爲一次性)。

+0

完美地工作,非常感謝! – anad2312

相關問題