2009-07-27 41 views
0

我有一個UI組件,出於各種原因,我必須以編程方式構建。該組件是一個按列分組的單選按鈕表。如何以編程方式將RadioButton與ActionScript3中的RadioButtonGroup相關聯?

現在,我正在構建列組,像這樣:

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屬性的值。

因此,簡而言之,我很難理解如何讓這些位彼此交談。我該怎麼做呢?

- 編輯 -

事實證明,我可以有簡單地通過設置groupName屬性創建相關的羣體,但我不能在集團成立一個遴選聽者獲得;該組在設置過程之後立即爲NULL,這意味着下面的第二行將拋出NPE的Flex等效物:

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

也許一個control.validateNow()將在這裏幫助。 – 2009-07-27 20:27:11

回答

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

設置groupName應該可以工作。

所有我可以建議是到步驟通過單選按鈕組件的組()和吸氣劑看到哪兒它失敗。你是否以編程方式創建組?如果是這樣的話,也許它還沒有完全初始化。

相關問題