如何在flex 3上的列表控件上动态设置selectedIndices?

时间:2014-09-30 09:59:24

标签: flex flex3

如何在flex 3上的列表控件上动态设置selectedIndices?

我在转发器控件中使用列表。我有一个选项多选列表。当我选择多个选项时,我可以选择索引作为数组并存储在数据库中。同时在选定索引属性的列表控件中列出所选值时,它将无法正确设置。在这里,我已经给出了我的代码。

    <mx:VBox y="30" x="1" id="vboxState">
        <mx:Repeater id="rptrRadioState" dataProvider="{rptrArr}">
            <mx:HBox>
                <mx:List id="cmbstateradio" selectedIndices="{new Array(1,3)}" dataProvider="{listarr}" allowMultipleSelection="true" change="(event.currentTarget.getRepeaterItem().selectedval = cmbstateradio[event.target.repeaterIndices].selectedIndices)"/>
            </mx:HBox>
        </mx:Repeater>
    </mx:VBox>

工作正常。但如果我以下面提到的方式尝试,那就不行了。

    [Bindable]
            public var arr:Array = new Array(1,3);

            [Bindable]
            public var rptrArr:ArrayCollection = new ArrayCollection([{label:"TestA",data:0,selectedval:new Array(1,3)},{label:"TestB",data:1,selectedval:arr},{label:"TestC",data:2,selectedval:arr}]);

    <mx:VBox y="30" x="1" id="vboxState">
        <mx:Repeater id="rptrRadioState" dataProvider="{rptrArr}">
            <mx:HBox>
                <mx:List id="cmbstateradio" selectedIndices="{new Array(rptrRadioState.currentItem.selectedval)}" dataProvider="{listarr}" allowMultipleSelection="true" change="(event.currentTarget.getRepeaterItem().selectedval = cmbstateradio[event.target.repeaterIndices].selectedIndices)"/>
            </mx:HBox>
        </mx:Repeater>
    </mx:VBox>        

2 个答案:

答案 0 :(得分:0)

问题可能在这部分代码中:

"{new Array(rptrRadioState.currentItem.selectedval)}"

正如我所见,你创建了数组数组。尝试从语句中删除新的Array()。然后看下一个:

"{rptrRadioState.currentItem.selectedval}"

此外,您需要为selectedIndices使用不同的数组。例如:

[Bindable]
public var rptrArr:ArrayCollection = new ArrayCollection([
                                                              {label: "TestA", data: 0, selectedval: [1, 3]},
                                                              {label: "TestB", data: 1, selectedval: [1, 3]},
                                                              {label: "TestC", data: 2, selectedval: [1, 3]}
                                                         ]);

P.S。不幸的是,我无法解释为什么它不适用于所有列表'selectedIndices的一个数组实例。也许别人知道答案。

答案 1 :(得分:0)

您在不同的元素中使用相同的数组arr。如果你真的需要这种行为,最好尝试克隆数组arr,而不是将其分配给许多组件。尝试不使用相同的阵列arr我认为这是问题所在。 flex 3上的某些元素不得在不同的可视组件中共享。我更喜欢在重复事件中为重复的组件分配属性,而不是在线进行。