寻找更有效的方法来清除控件

时间:2011-07-28 02:42:38

标签: flex actionscript-3 flash-builder mxml

在main.mxml中,我有一堆textInput控件组合框和一些复选框,我希望能够通过某种循环来清除它。现在,我这样做:

public function clearAll():void
{
  customerIDInput.text = "";
  listIDCombo.selectedItem = "";
  listVersionInput.text = "";
  suppressMasterFilesInput.text = "";
  priorOrderSuppressInput.text = "";
  onePerSelectInput.text = "";
  geoCountOptionsInput.text = "";
  keyCodeInput.text = "";
  nthSelectInput.text = "";
  geoTypeInput.text = "";
  geoValueFromInput.text = "";
  latitudeInput.text = "";
  longitudeInput.text = "";
  begRadiusInput.text = "";
  endRadiusInput.text = "";
  geoSelectOmitCheck.selected = false;
  fieldIDInput.text = "";
  fieldValueInput.text = "";
  fieldSelectOmitCheck.selected = false;
  outputFieldCheck.selected = false;
}

我在SO上发布了一篇文章,建议使用creationComplete事件将控件添加到ArrayCollection中。我试过了,它工作得很好,但它没有比我现在更优雅。所有这些控件都是mxml格式,而不是我用AS生成的。我也试过像这样的循环:

for each (var ctrl:UIComponent in Application)
{
  switch(ctrl.className)
  {
    case TextInput:

虽然我无法超越那一部分。我找不到引用控件值的方法。有人知道吗?

1 个答案:

答案 0 :(得分:3)

我可能会按照你的方式去做。有没有令人信服的理由不这样做?鉴于命名约定,我猜你在编译时有明确数量的已定义控件。您似乎没有未知号码。

您可以为组件的所有子项计算一个循环:

for (var index:int=0;this.numChildren ; x++){
 var component : UIComponent = this.getChildAt(index) as UIComponent;
 if(component is TextInput){
   component.text = '';
 } else if (component is ListBase){
   component.selectedIndex = null;
 }
 // etc for other comp types
}

但是,似乎你正在加入过度的处理;使你的代码更难开发;并且更难阅读。