防止选择火花列表中的特定项目

时间:2011-09-24 13:02:01

标签: flex4.5 itemrenderer

我有一个Spark List,它有一个自定义itemRenderer用于呈现List中的每个项目。 我希望防止用户选择该列表中的项目(基于某些自定义逻辑)。

我能做到这一点的最佳方式是什么?

以下是我的List的定义方式:

<s:List id="myList" itemRenderer="com.sample.MyItemRenderer" />

当然,我有一个项目渲染器被定义为类com.sample.MyItemRenderer

1 个答案:

答案 0 :(得分:3)

据我所知,项目的选择仅由列表处理,所以我想你可以从那里管理它。我会在列表中名为“selectable”的对象上有一个字段,或类似的东西,当列表项更改时检查新项目是否实际可选,如果不是,那么你可以拥有它清除选择或重置为先前的选择。您可以通过对列表组件上的“更改”事件做出反应并在IndexChangeEvent上调用“preventDefault”来完成此操作,如下所示:

protected function myList_changingHandler(event:IndexChangeEvent):void {
    var newItem:MyObject = myList.dataProvider.getItemAt(event.newIndex) as MyObject;
    if(!newItem.selectable) {
        event.preventDefault();
    }
}

// Jumping ahead ...

<s:List id="myList" changing="myList_changingHandler(event)" // ... continue implementation

MyObject类的相关部分如下:

public class MyObject {

    private var _selectable:Boolean;

    public function MyObject(){

    }

    public function set selectable(value:Boolean):void {
        _selectable = value;
    }

    public function get selectable():Boolean {
        return _selectable;
    }
}