2009-07-27 15 views
0

私はさまざまな理由から、プログラム的に構築する必要があるUIコンポーネントを持っています。コンポーネントは、列でグループ化されたラジオボタンの表です。ActionScript3でラジオボタンとラジオボタングループをプログラムで関連付けるにはどうすればよいですか?

今、私はそうのような列グループを構築しています:

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

私はそうのような列グループとRadioButtonインスタンスを関連付けしようとしている:私は見ることができます

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

デバッガで、コントロールがグループに関連付けられていることを確認します。

control.group == groups[[email protected]()] 

しかし、私はグループが制御については何も知らないことも同様に見ることができます。

group.radioButtons.length == 0 

私はRadioButtongroupためのセッターがダムセッターであるためであると想像します。それがするのは、groupNameという魔法をしない変数にコピーすることだけです。しかし、私はRadioButton.groupNameプロパティを正しく設定するために使用すべき値を見つけられないようです。

要するに、私はこれらのビットを互いに話すようにする方法を困惑しています。これはどうすればいいですか?

- EDIT -

それは私が単にグループ名プロパティを設定することにより作成され、関連するグループを持つことができますが、私は選択リスナーを設定するグループでは得ることができないことが判明。グループ名は、動作するはず設定

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

おそらくcontrol.validateNow()が役に立ちます。 –

答えて

1

最初の本能は、この問題がinvalidateDisplayListと、それがいつ呼び出されるのかということです。もちろん、その機能に関連する問題はFlexのいくつかの癖の後ろにあるので、私は呪わわしいかもしれません。

これはあなた自身の質問に対する回答ではありませんが、実際には別の解決策として機能するようです。

RadioButtonGroupsは、IFlexDisplayObjectに基づいて初期化されます。これはあなたのような何かを行うことができますことを意味します

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

問題は、それが最も実用的な答えではないかもしれないということですが、それは可能な解決策であることの決定の利点を持っています。

0

:グループは、第二のラインは以下NPEのフレックス同等物を投げることを意味し、直ちに設定処理の後にNULLです。

私が示唆できるのは、RadioButtonコンポーネントのgroup()ゲッターを実行し、正確にどこが失敗しているかを確認することです。プログラムでグループを作成していますか?そのような場合は、まだ完全に初期化されていない可能性があります。

関連する問題