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