Как я могу связать переменные в AS3 Flash Project? - PullRequest
0 голосов
/ 20 марта 2011

Буду признателен, если бы вы связали меня с примером того, как связать две переменные в AS3, но для проекта Flash вместо проекта Flex.Я нашел ссылки на связывание с Flex, но я предполагаю, что это должно быть как-то возможно и во Flash.

Позвольте мне объяснить, используя следующий пример:

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

public class bindable_variables{
    var foo: String;
    var bar: String;

    public function bindable_variables()
    {
        //bind foo to bar so every change to foo affect bar
    }
}

Спасибо.

PS Я нашел этот пост, но не мог понять, как его использовать. Как использовать привязку Flex в проекте Flash AS3

Ответы [ 2 ]

1 голос
/ 21 марта 2011

BindingUtils - это класс в Flex SDK, поэтому другая публикация, на которую вы ссылаетесь, неприменима в вашем случае.

Чтобы добиться связывания без доступа к библиотекам Flex, вам потребуетсячтобы вручную написать диспетчеры событий и соответствующие обработчики.

Следующая статья может быть полезна для начала работы, поскольку в ней есть как Flash-only, так и Flex-код: Введение в обработку событий в AS3

Возможно, есть лучшие способы сделать это, но, по сути, вам нужно обернуть любую переменную, с которой вы хотите связать, в класс, который расширяет EventDispatcher .Например, что-то вроде:

public class BindableString extends EventDispatcher {

  private var _value:String = '';

  public function BindableString(str:String = null) {
    value = str;
  }

  public function set value(str:String):void {
    _value = str;
    dispatchEvent(new Event(Event.CHANGE));
  }

  public function get value():String {
    return _value;
  }

}

Затем в каком-то другом классе вам понадобится обработчик, например ::

public class MyClass {

  public var foo:BindableString = new BindableString();
  private var _bar:String = "bar";

  public function MyClass() {
    foo.addEventListener(Event.CHANGE, handleFooChange);
    foo.value = "foo";
    trace(_bar); // "foo"
  }

  private function handleFooChange(e:):void {
    _bar = foo.value;
  }

}

Тогда каждое изменение в foo должно распространятьсядо _bar.

Это базовая схема.Я не запускал этот код, но он должен обеспечить основу для выполнения связывания.Это также должно позволить вам связываться с foo за пределами MyClass.

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

0 голосов
/ 20 марта 2011

Вы можете достичь того же, используя геттеры и сеттеры.

public class bindable_variables{
    private var _foo: String;
    public var bar: String;

    public function bindable_variables()
    {
        foo = "a string";
        trace("bar: " + bar);
    }

    public function set foo(newFoo:String):void
    {
        _foo = newFoo;
        bar = foo;
    }

    public function get foo():String 
    {
        return _foo;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...