AS3 - Я могу обнаружить изменение значения переменной с помощью addEventListener?

Если вы имеете в виду, у вас есть другой базовый URL. вы можете сделать что-то вроде этого:

public interface YourAPIInterface {

    @GET
    Call<POJO> doAllItems(@Url String url);

}

@Url для параметра, чтобы позволить динамически указывать полное имя хоста. Тогда вы можете назвать это обычным способом в Refrofit

10
задан shibbydoo 20 November 2008 в 21:24
поделиться

3 ответа

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

(Примечание: Методы set и Методы считывания рассматривают как свойства). Вы просто присваиваете значение, в противоположность вызову метода (например, someVar = 5 вместо someVar(5); Даже при том, что методы set / методы считывания являются функциями/методами, их рассматривают как свойства.

//The document class
package
{
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.events.EventDispatcher;

  public Class TestDocClass extends Sprite
  {
    private var _model:Model;

    public function TestDocClass():void
    {
      _model = new Model();
      _model.addEventListener(Model.VALUE_CHANGED, onModelChanged);
    }

    private function onModelChanged(e:Event):void
    {
      trace('The value changed');
    }
  }
}

//The model that holds the data (variables, etc) and dispatches events. Save in same folder as DOC Class;
package
{
  import flash.events.Event;
  import flash.events.EventDispatcher;

  public class Model extends EventDispatcher
  {
    public static const VALUE_CHANGED:String = 'value_changed';
    private var _someVar:someVarType;

    public function Model():void
    {
      trace('The model was instantiated.');
    }

    public function set someVariable(newVal:someVarType):void
    {
      _someVar = newVal;
      this.dispatchEvent(new Event(Model.VALUE_CHANGED));
    }
  }
}
14
ответ дан 3 December 2019 в 21:23
поделиться

@BrianHodge: Как вы на самом деле используете твой пример? Как вы вызываете функцию set? Как вы относитесь к этому? Куда передать переменную, которая будет изменена? ..

Скажем, если я хочу изменить переменную в обертке, например, нажатием кнопки. Я должен признаться, что я пробовал некоторые другие коды и примеры (getter / setter) типа, с dispatchEvent или без, и я не могу преодолеть это! Но ваш пример, кажется, именно то, что мне нужно, просто не могу заставить его работать.

Я получаю Модель была создана , когда я установил функцию в качестве класса документа. Вот и все.

Наконец-то я узнал о таких людях, как я, которые теряют время из-за этой отправки!
In my case the _someVar variable has to be data typed as a String (same thing for fornewVal).

OnceTestDocClass is set as your document class; you refer to the Model instantiated like this:

_model.someVariable="new stuff";  

I was trying to change the value like this:

_model.someVariable("new stuff");  

You can add some trace actions in the Model class to have a clear demo in the output panel:

package
{
  import flash.events.Event;
  import flash.events.EventDispatcher;

  public class Model extends EventDispatcher
  {
    public static const VALUE_CHANGED:String = 'value_changed';
    private var _someVar:String = "default";

    public function Model():void
    {
      trace('The model was instantiated.');
    }

    public function set someVariable(newVal:String):void
    {
      trace ("before " + _someVar);
      _someVar = newVal;
      trace ("after " + _someVar);
      this.dispatchEvent(new Event(Model.VALUE_CHANGED));
    }
  }
}

It's not much, but these things can cost some people a whole lot of time =)

2
ответ дан 3 December 2019 в 21:23
поделиться

Вы раньше могли сделать что-то подобное в AS2 с помощью Object.watch. Я не вижу прямой эквивалент, но он похож на mx.binding.utils. ChangeWatcher даст Вам схожую функциональность для любых переменных, которые связываемы.

Я не знаю о способе сделать это в AS3 для несвязываемых переменных, но если переменная, которую Вы хотите наблюдать, связываема (или если можно изменить его, чтобы быть binadable), затем, ChangeWatcher мог бы дать Вам, что Вы хотите.

1
ответ дан 3 December 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: