【问题标题】:How do I programmatically associate a RadioButton with a RadioButtonGroup in ActionScript3?如何以编程方式将单选按钮与 ActionScript 3 中的单选按钮组相关联?
【发布时间】:2010-11-14 11:25:03
【问题描述】:

我有一个 UI 组件,由于各种原因,我必须以编程方式构建它。该组件是一个按列分组的单选按钮表。

现在,我正在像这样构建列组:

private function createGroupsForItemList(items: XMLList): void {
    for each (var item: XML in items) {
        var rbGroup: RadioButtonGroup = new RadioButtonGroup();
        groups[item.@level.toString()] = rbGroup;
    }
}

我正在尝试将 RadioButton 实例与列组相关联,如下所示:

private function createValueControl(item: XML): UIComponent {
    var control: RadioButton = new RadioButton();
    control.label = "";
    control.group = groups[item.@level.toString()];
    control.addEventListener(Event.SELECT, updateSelection);
    return control;
}

我可以在调试器中看到控件与组有关联:

control.group == groups[item.@level.toString()]

但是,我同样可以看到该组对控件一无所知:

group.radioButtons.length == 0

我想这是因为RadioButtongroup 的设置器是一个愚蠢的设置器;它所做的只是复制到变量中,这并没有像groupName 那样发挥作用。但是,我似乎找不到正确设置 RadioButton.groupName 属性的值。

所以,简而言之,我不知道如何让这些位相互交谈。我该怎么做?

-- 编辑--

事实证明,我可以简单地通过设置 groupName 属性来创建和关联组,但我无法在组中设置选择侦听器;该组在设置过程后立即为 NULL,这意味着下面的第二行抛出了 NPE 的 Flex 等效项:

control.groupName = groupNameForLevel(item);
control.group.addEventListener(Event.SELECT, updateSelection);

【问题讨论】:

  • 也许 control.validateNow() 在这里会有所帮助。

标签: apache-flex actionscript-3 flex3


【解决方案1】:

第一直觉是这个问题与 invalidateDisplayList 以及何时以及如何调用有关。当然,由于与该功能相关的问题是 Flex 的一些怪癖背后的原因,我可能只是替罪羊。

这本身不是您问题的答案,但它似乎实际上可以作为替代解决方案。

RadioButtonGroups 将基于 IFlexDisplayObject 进行初始化。这意味着您可以执行以下操作:

var c:HBox               = new HBox();
var rbg:RadioButtonGroup = new RadioButtonGroup( c );
// do stuff with rbg.
c.addChild( new RadioButton() );

问题在于它可能不是最实用的答案,但它具有作为一个可行解决方案的决定性好处。

【讨论】:

    【解决方案2】:

    设置 groupName 应该可以工作。

    我只能建议单步执行 RadioButton 组件的 group() getter,看看它到底在哪里失败了。您是否也在以编程方式创建组?如果是这样,可能还没有完全初始化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 2021-12-19
      相关资源
      最近更新 更多