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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
Actionscript 3 如果属性的值未更改,是否未调用可绑定的setter?_Actionscript 3_Apache Flex_Flex4 - Fatal编程技术网

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总是比生成代码更有价值,因为您可以调试每一步。很高兴你找到了问题的根源。