【问题标题】:Looking for a more efficient way to clear controls寻找一种更有效的方式来清除控制
【发布时间】:2011-07-28 02:42:37
【问题描述】:

在 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:

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

【问题讨论】:

    标签: apache-flex actionscript-3 flash-builder mxml


    【解决方案1】:

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

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

    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
    }
    

    但是,您似乎添加了不当处理;使您的代码更难开发;并且更难阅读。

    【讨论】:

    • 真的,我试图限制代码行数。您的解决方案将使我大约 10 行,这比我当前的解决方案少 50%。但我明白你在说什么;我的方式很清楚它应该做什么。
    • @totbar 不要害怕有更多的代码,特别是如果它使事情更容易理解和维护的话。选择任何给定的设计模式;我可以保证我可以用更少的代码做同样的事情。但它可能不会那么可扩展、可理解或可维护。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2015-07-16
    • 2023-01-19
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多