Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在AS3 Flash项目中绑定变量?_Flash_Actionscript 3_Binding - Fatal编程技术网

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

如何在AS3 Flash项目中绑定变量?,flash,actionscript-3,binding,Flash,Actionscript 3,Binding,如果您能将我链接到一个示例,说明如何在AS3中绑定两个变量,但对于Flash项目而不是Flex项目,我将不胜感激。我找到了使用Flex绑定的引用,但我认为这在Flash中也应该是可能的 让我用下面的例子来解释: 每次我在代码中的某个地方更改foo时,我都希望bar更改为相同的值 public class bindable_variables{ var foo: String; var bar: String; public function bindable_varia

如果您能将我链接到一个示例,说明如何在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
    }
}
谢谢

附言。 我找到了这篇文章,但不知道如何使用它。

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

BindingUtils
是FlexSDK中的一个类,这就是为什么您链接的另一篇文章不适用于您的情况

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

以下文章可能有助于您入门,因为它既有Flash only代码,也有Flex代码:

也许有更好的方法可以做到这一点,但本质上,您需要将要绑定到的任何变量包装到一个扩展的类中。例如,类似于:

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
中的每一个更改都应该传播到
\u-bar

这是基本的大纲。我没有运行此代码,但它应该为完成绑定提供基础。这还应该允许您在
MyClass
之外绑定到
foo


也许其他人可能知道是否已经有一个EventDispatcher的好后代,它可能已经实现了这个功能。我主要是一名Flex编码员,所以我不知道有什么现成的东西。

我希望跨类进行绑定。我给出的例子在这篇文章中被简化了。在我的项目中,变量在不同的类中。今天,我通过监听第一个变量中的一个事件来跟踪变化。绑定变量似乎仅限于Flex项目。对此的任何最终确认将不胜感激