[Bindable]在动作中意味着什么?

问题描述:

[Bindable] 
/** 
* Display output of video device. 
*/    
public var videoLocal : Video; 

任何人都知道吗?[Bindable]在动作中意味着什么?

它在数据绑定使用Flex中,你可以阅读更多关于它在这里

http://livedocs.adobe.com/flex/3/html/help.html?content=databinding_2.html

创建属性当您创建一个属性来作为源使用数据绑定

那你想使用 作为数据源 绑定表达式,Flex可以 自动将 源属性的值复制到任何目标 属性当源属性 更改。要向Flex发送信号以执行 复制,您必须使用[Bindable] 数据标记来注册属性为 Flex。

+0

如何做类似的工作,而不挠? – ollydbg 2010-10-18 13:28:42

+1

@ollydbg我在回答这个问题的底部简单回答了您的评论/问题。简而言之,不使用mxml,您可以使用** mx.binding.utils **包直接在actionscript中创建和修改绑定。 – 2011-03-15 21:08:09

[Bindable]是您可以在Flex ActionScript代码中使用的几个元标记之一。它可以应用于任何范围内标记的属性或方法。它不能用于静态类成员。

使用[Bindable] meta标签的关键是了解使用它时引擎盖下的情况。本质上使用数据绑定是一种用于添加事件侦听器和分派事件的简写形式。

[Bindable]标签有两种基本形式。第一个是[Bindable]后跟一个var/property声明。第二个是[Bindable(event =“eventname”)]后跟一个var/property声明,一个函数/方法声明或getter/setter声明的一半。

我会解释更长的记法,因为另一个基于相同的概念,但速度更快。

当你使用[Bindable(event =“eventname”)]你基本上告诉编译器这个var/property/function /方法(称为这个实例成员)是'available'用作数据绑定的来源。您还告诉它,当实例成员的值已被无效/更改时,需要重新读取“eventname”事件将被分派。
在这个更长的形式,这一切你在做什么。只要值需要在绑定订户中更新,开发人员就负责实际分派“eventname”事件。

使用数据绑定的真正效率来自订阅方。典型的符号,你会在MXML看到的是值=“{} instance.propertyName”当您使用符号{}你告诉编译器执行以下操作:

  1. 创建一个事件侦听器监听可绑定元标记中指定的事件
  2. 在该事件中,侦听器重新读取实例。如果您用简短形式[绑定] propertyName的和更新该值

,你一个属性/ VAR前添加标签,编译器填补了空白,并增加了部分附加功能,使属性可绑定。从本质上讲,你是在告诉编译器“添加你需要这个属性绑定的事件和方法”
我们想起了什么,编译器会做引擎盖下是这样的方式。

  1. 让你的VAR的私人版本
  2. 创建一个“事件”触发结合
  3. 创建您返回变种的私人VERSON原变种的范围和名称的getter函数调用时。
  4. 创建一个setter函数,其中包含原始var的范围和名称,该函数在调用AND时调度var的私有版本并调度触发事件。

本质编译器会做很多为你工作。

[Bindable] 
    public var xyz 

相当于

private var _xyz:String; 

    [Bindable(event="updateXYZValue")] 
    public function get xyz():String{ 
     return _xyz; 
    } 

    public function set xyz(newxyz:String):void{ 
     _xyz = newxyz; 
     dispatchEvent(new Event("updateXYZValue")); 
    } 

在这些唯一的功能差异是,在第一个实例;

  1. 你不知道的结合

这第二个将被分派到触发绑定

  • 没有办法更新基础值没有触发数据事件的名称示例还演示了一个特殊情况的[Bindable]元标记。这就是说,当你将它应用到为同一个变量名定义的getter/setter对时,只需要将它应用于其中一个或另一个,它将应用于两者。通常你应该把它设置在吸气剂上。

    您可以使用函数/任意方法但是符号,如果你不指定事件将永远不会被触发,所以如果你正在试图绑定到一个函数,你应该送花儿给人指定事件的结合。也可以通过堆叠标签来指定多个触发事件。例如。

    [Bindable(event="metaDataChanged")] 
        [Bindable(event="metaObjectUpdated")] 
        public function readMyMetaData():MetaDataObject{ 
         var myMetaDataObject:MetaDataObject; 
          . 
          . 
          . 
    
         return myMetaDataObject; 
        } 
    

    这假定别的你的地方你的类,你会分派此metaDataChanged事件或metaObjectUpdated事件,当你想触发绑定。

    也要注意,使用这个符号可以配合任何实例成员的结合的任何事件的情况下将出动。即使是继承的事件,你自己也不如FrameEnter,的OnChange等产生...

    数据绑定,也可以安装和运行过程中被破坏。如果您对此感兴趣,请查看mx.binding.utils类。

  • +0

    检查Mihai的答案[下](http://*.com/a/19729201/2530736)双向绑定 – Vanlalhriata 2014-04-08 14:53:41

    作为补充什么贾斯汀说,你实际上可以使用两种方法数据的Flex与@具有约束性。这里有一个例子:

    <s:TextInput id="txt1" text="@{txt2.text}" /> 
    

    对于源代码的工作示例启用你可以看看这篇文章,我写了一段时间后:

    Two-ways data binding in Flex