Как отключить выпадающую функцию поля со списком при определенных условиях?

У меня есть поле со списком в моем приложении. У меня также есть переменная под названием «Статус». Я хочу, чтобы поле со списком было включено только тогда, когда значение переменной состояния равно 5 или 6. В противном случае я не смогу изменить значение в поле со списком. Он должен иметь только предыдущее значение.

Я написал событие щелчка, чтобы отключить поле со списком. Но даже если поле со списком отключено, я получаю раскрывающийся список поля со списком, и если я выбираю другое значение в раскрывающемся списке, оно изменяется. Только после этого оно отключается.

Как этого избежать? Я хочу, чтобы сама функция выпадающего списка была отключена. Это код, который я написал. Кто-нибудь, направьте меня.

<mx:FormItem label="Review Status:" width="100%" horizontalAlign="right">
  <mx:HBox>
     <mx:Label  width="30"/>
        <mx:ComboBox id="reviewStatus" dataProvider="{Status}" 
                     width="150" click="onStatusChange(event)"/> 
  </mx:HBox>

Часть сценария действия:

private function onStatusChange(event:Event):void
{
  var i:int;
  for(i=0;i<defectDetails.length;i++)
  {
    var defStatusId:String=defectDetails.getItemAt(i).DefectStatusId;
    if(defStatusId=="5"){
               reviewStatus.enabled=true;
    }  
    else  if(defStatusId=="6"){
               reviewStatus.enabled=true;
    }
    else{
               reviewStatus.enabled=false;
             //reviewStatus.selectedItem.label="Review";
             reviewStatus.toolTip="Status can be changed only if Defect Status is Verified or Deferred.";

              //Alert.show("Status can be changed only if defect status is verified or deferred");
    }
   }
  }

Если я также использую событие Change, значение изменяется впервые. Только после этого поле со списком отключается. Как сохранить то же значение и отключить поле со списком, когда статус не 5 или 6?


person Angeline    schedule 21.11.2009    source источник


Ответы (3)


Вызовите reviewStatus.close(), прежде чем установить значение false.

Почему вы делаете это в событии click ComboBox? Лучше сделать это в событии изменения defectDetails (или элемента управления, который использует defectDetails в качестве поставщика данных).

Кстати, там есть еще одна потенциальная ошибка: вы устанавливаете значение enabled в цикле и не прерываете цикл после его установки. Окончательное значение reviewStatus.enabled будет зависеть исключительно от последнего элемента — defectDetails.getItemAt(defectDetails.length - 1).

Кроме того, вы не возвращаете всплывающую подсказку в нормальное состояние, когда enabled имеет значение true.

person Amarghosh    schedule 21.11.2009

Почему петля? Не могли бы вы просто захватить selectedItem как Int при изменении статуса, то есть:

reviewStatus.enabled = ((reviewStatus.selectedItem as Int)) == 5 || (reviewStatus.selectedItem as Int) == 6) ? false : true;

Хотя, как только он будет отключен, вы, вероятно, больше не будете получать события StatusChange, а?

person Nate W.    schedule 21.11.2009

Возможно, вы можете использовать функцию привязки «включено» для «reviewStatus». Нравится,

<mx:ComboBox id="reviewStatus" enabled = {checkEnabledForReviewStatus(defectStatusId)} />

И в части сценария,

private function checkEnabledForReviewStatus(defectStatusId:String):Boolean 
{
    return (defectStatusId == "5" || defectStatusId == "6") ? true: false;
}
person Sai Prasad    schedule 27.11.2009