Actionscript 3 如果属性的值未更改,是否未调用可绑定的setter?
(这可能是一个过于本地化的问题,但我将尝试概括它) 问题:如果属性Actionscript 3 如果属性的值未更改,是否未调用可绑定的setter?,actionscript-3,apache-flex,flex4,Actionscript 3,Apache Flex,Flex4,(这可能是一个过于本地化的问题,但我将尝试概括它) 问题:如果属性setter标记为Bindable,那么如果新值与旧值相同,是否会调用该属性 我在继承的遗留项目中看到了上述行为:setter没有被调用。如果我没有将setter声明为可绑定的,那么不管新值是什么,都会调用setter 有人能确认以上是设计绑定的方式吗 这个项目到处使用绑定,代码中没有注释,因此很难判断依赖项是什么以及代码的哪些部分依赖于特定绑定。我试图避免做出重大的改变,但我也不想浪费时间去解决一些应该重构的问题 属性已绑定:
setter
标记为Bindable
,那么如果新值与旧值相同,是否会调用该属性
我在继承的遗留项目中看到了上述行为:setter没有被调用。如果我没有将setter声明为可绑定的,那么不管新值是什么,都会调用setter
有人能确认以上是设计绑定的方式吗
这个项目到处使用绑定
,代码中没有注释,因此很难判断依赖项是什么以及代码的哪些部分依赖于特定绑定。我试图避免做出重大的改变,但我也不想浪费时间去解决一些应该重构的问题
属性已绑定:
[Bindable]
protected var _source:AolMediaFile;
[Bindable]
public function set source(file:AolMediaFile):void{
_source = file;
// do some stuff with file
}
设置程序已绑定:
[Bindable]
protected var _source:AolMediaFile;
[Bindable]
public function set source(file:AolMediaFile):void{
_source = file;
// do some stuff with file
}
所以在这里再深入一点,我遇到了这个问题:它描述了通过声明setter或getter
Bindable
显然,在生成的代码中有一个检查,看看值是否不同:
public function set name(value:String)
{
if (_name == value)
return;
_name = value;
dispatchEvent(new Event("nameChanged"));
}
仅当事件源是
[Bindable]
时才调用setter。数据绑定基本上是在各种场景中从源发送到目标的事件链。当您将属性或setter声明为[Bindable]
时,基本上不会改变行为中的任何副作用,因为事件被调度并生成侦听器。例如:
<your:Component source="{any.source.aolMediaFile}" />
如果要绑定到AolMediaFile
的属性,则类或特定属性也必须是[Bindable]
如果无法生成绑定,编译器通常会打印警告:
警告:无法绑定到类“Object”上的属性“source”
(类不是IEventDispatcher)
因此,请检查源对象,它是源的宿主对象的依赖项和编译器警告。我认为您误读了这篇文章@Sunil D.将此作为自己的代码发布。他提到,可以通过在标记中指定事件名称来防止自动生成的代码生成。通过这种方式,您可以提供自己的setter函数,该函数不包括检查值是否更改。但请记住,如果不进行检查,设置者的循环调用将导致问题。我没有使用flex的经验,这就是我阅读他的答案的方式。这就是为什么手动实现setter总是比生成代码更有价值,因为您可以调试每一步。很高兴你找到了问题的根源。