2011-07-28 3 views
1

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; 
} 

내가 creationComplete 이벤트와 함께있는 ArrayCollection에 컨트롤을 추가 시스템 권장 SO에 대한 게시물을 읽어 보시기 바랍니다. 나는 그것을 시도하고 괜찮 았지만 지금은 내가 가지고있는 것보다 더 우아하지 않았다. 이러한 컨트롤은 모두 mxml 형식이며 AS에서 생성되지 않습니다. 나는 또한 이런 루핑을 시도했다 :

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

나는 그 부분을 지나칠 수 없다. 컨트롤의 값을 참조하는 방법을 찾을 수 없습니다. 누구 알아?

답변

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 
} 

을하지만;

당신은 구성 요소의 모든 어린이를위한 루프를 해결할 수 코드를 개발하기가 더 어렵습니다. 읽기가 더 힘듭니다.

+0

정말 코드 줄 수를 제한하려고했습니다. 귀하의 솔루션은 내 현재 솔루션보다 50 % 적은 10 줄 정도를 넣을 것입니다. 그러나 나는 네가하는 말을 본다. 내 길은 그것이하기로되어있는 것에 관해서는 꽤 분명하다. – smulholland2

+1

@totbar 더 많은 코드를 두려워하지 마십시오. 특히 이해하기 쉽고 유지 보수하기가 쉽습니다. 주어진 디자인 패턴을 선택하십시오. 적은 코드로 똑같은 일을 할 수 있다는 것을 보장 할 수 있습니다. 아마도 확장 성, 이해 가능 또는 유지 보수 성이 떨어질 것입니다. – JeffryHouser

관련 문제