如何在AS3 Flash项目中绑定变量?

时间:2011-03-20 08:35:11

标签: flash actionscript-3 binding

如果您能将我链接到如何在AS3中绑定两个变量的示例,我会很感激,但是对于Flash项目而不是Flex项目。我找到了与Flex绑定的引用,但我认为这也应该在Flash中以某种方式实现。

让我用以下的例子解释一下:

每当我在代码中的某处更改foo时,我希望bar更改为相同的值。

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

感谢。

P.S。 我找到了这篇文章,但无法弄清楚如何使用它。 How do I use Flex's Binding in a Flash AS3 project

2 个答案:

答案 0 :(得分:1)

BindingUtils是Flex SDK中的一个类,这就是您链接到的其他帖子不适用于您的情况的原因。

要在不访问Flex库的情况下实现绑定,您必须手动编写事件调度程序和相应的处理程序。

以下文章可能有助于您入门,因为它同时包含Flash和Flex代码: Introduction to Event Handling in 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编码器,所以我不知道我的头脑。

答案 1 :(得分:-1)

您可以使用getter和setter来实现相同目的。

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