flex: как реагировать на изменение данных внутри компонента - PullRequest
1 голос
/ 17 февраля 2011

Я создал пользовательский компонент на основе компонента Image. Я хочу научить его реагировать на изменение связанной переменной. Например. если основной класс имеет переменный баланс, я хочу, чтобы компонент изменил изображение в случае, если баланс = 100 одно изображение, в случае баланса = 50 на другое.

Может кто-нибудь помочь понять, как это сделать


Я использую flex3, поэтому не вижу там propertyWatcner. Также я использую component2 из основного файла mxml таким образом

<MyComp:MyIcon left="15" top="20" width="60" height="60"
    id="tower" price="100" accountState="{accountMoney}"
    click="drawBuildingShadow(event)" />

А внутри компонента MyIcon я хочу иметь возможность реагировать на изменения связанной учетной записи accountState.

1 Ответ

3 голосов
/ 17 февраля 2011

Без какого-либо кода (пожалуйста, включите образец обоих компонентов, если можете), есть несколько способов, которыми вы можете подойти к этому.

Вы можете добавить ChangeWatcher, который связан срассматриваемая переменная и вызывает метод при изменении свойства.Этот метод может изменить изображение в зависимости от условий, применимых к свойству.

Это будет выглядеть что-то примерно так:

Component 1:
  [Bindable]
  public var yourVariable:Number;

Component 2:
  private var propertyWatcher:ChangeWatcher;
  //In some initialization method -- this is JUST an example method for how to create the property watcher
  public function init(): void {
      ...
      propertyWatcher = ChangeWatcher.watch(component1, "yourVariable", onVariableUpdate);
  }

  //Define this as a new method to handle when the property changes
  private function onVariableUpdate(event:PropertyChangeEvent):void {
     if(event.newValue == 50) {
       yourImage.source = newSource;
     }
     else if(event.newValue == 100) {
       yourImage.source = otherSource;
     }
  }

Очевидно, это очень усеченный и сокращенный, но, надеюсь, это поможет вам начать.


Редактировать : ChangeWatchers действительно существуют во Flex 3, но, похоже, вам следует войти вдругое направление.Поскольку фрагмент кода, который вы разместили, немного мал, я собираюсь сделать несколько предположений о том, как вы могли бы сделать это:)

Как уже упоминалось в своем комментарии alxx, вы можете изменить свойство accountState вВаш компонент от фактического свойства, до установщика / получателя.Это позволит вам выполнять более обширную обработку при обновлении accountState.

Это должно выглядеть что-то примерно так:

MyComp:

//Inside your script tag:
private var _accountState:Number;

[Bindable]
public function get accountState():Number {
    return _accountState;
}
public function set accountState(state:Number):void {
    _accountState = state;
    switch(state) {
        case 50:
            yourIcon.source = "blahblahblah";
            break;
        case 100:
            yourIcon.source = "blahblahblah2";
            break;
        //And so on
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...