【问题标题】:How can I bind variables in a AS3 Flash Project?如何在 AS3 Flash 项目中绑定变量?
【发布时间】:2011-03-20 08:35:11
【问题描述】:

如果您能将我链接到如何在 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
    }
}

谢谢。

附: 我找到了这篇文章,但不知道如何使用它。 How do I use Flex's Binding in a Flash AS3 project

【问题讨论】:

    标签: flash actionscript-3 binding


    【解决方案1】:

    BindingUtils 是 Fl​​ex 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

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

    也许其他人可能知道是否已经存在 EventDispatcher 的良好后代,它可能已经实现了此功能。我主要是一名 Flex 编码员,所以我不知道有什么想法。

    【讨论】:

      【解决方案2】:

      你可以通过使用 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;
          }
      }
      

      【讨论】:

      • 我希望跨类完成绑定。我给出的示例已针对本文进行了简化。在我的项目中,变量位于不同的类中。今天,我通过监听来自第一个变量的事件来跟踪变化。
      • 好吧,似乎绑定变量仅限于 Flex 项目。任何最终构象都将不胜感激
      猜你喜欢
      • 2011-02-05
      • 2010-12-23
      • 1970-01-01
      • 2010-12-01
      • 2011-02-13
      • 2011-02-19
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      相关资源
      最近更新 更多