原文地址:http://livedocs.adobe.com/flex/3/html/databinding_4.html
使用函数作为数据绑定源
你可以使用函数作为数据绑定表达式的一部分。函数的两个常用技术是把绑定的属性作为函数的参数来触发函数,或者让函数响应绑定事件。
使用参数是绑定的属性的函数
当把一个可绑定的属性作为函数的参数时,你可以把ActionScript函数用作数据绑定表达式的源。当可绑定的属性值改变时,这个函数会被执行,其运行结果会复制到目标属性,如下例子所示:
<?xml version=”1.0″?><application xmlns:mx="”http://www.adobe.com/2006/mxml”"><currencyformatter id="”usdFormatter”" precision="”2″" currencysymbol="”$”" alignsymbol="”left”/"><textinput id="”myTI”" text="”Enter" number here></textinput><textarea text="”{usdFormatter.format(myTI.text)}”/"></textarea></currencyformatter></application>
其运行结果如下:
Flash Content:Click Here to Show/Hide
在这个例子中,每当TextInput控件中的文本被修改时,Flex都调用CurrencyFormatter.format()方法更新TextArea控件。
如果给函数传递的参数不是可用作数据绑定表达式源的值,那么该函数只会在程序启动时被调用一次。
绑定函数响应数据绑定事件
你可以把一个没有可绑定属性做参数的函数作为数据绑定表达式的源。只不过你需要有一种能够调用该函数更新数据绑定目标的方法。
在下面的例子中,使用[Bindable]元数据标签指示Flex调用isEnabled()函数来响应myFlagChanged事件。当调用myFlag setter时,它会广播一个myFlagChanged事件,触发所有使用isEnabled()函数作为源的数据绑定。
<?xml version=”1.0″?><application xmlns:mx="”http://www.adobe.com/2006/mxml”"><script></script><textarea id="”myTA”" text="”{isEnabled()}”/"><button label="”Clear" myflag click="”myFlag=false;”/"><button label="”Set" myflag click="”myFlag=true;”/"></button></button></textarea></application>
其运行结果如下:
Flash Content:Click Here to Show/Hide
使用对象做数据绑定
当使用对象时,你应该思考一下,什么使用绑定到对象,什么时候绑定到对象的属性。
绑定到对象
当你把对象用作数据绑定表达式的源时,当对象更新时或者对该对象的引用更新时,而不是当对象的某个字段更新时,数据绑定就会发生。
下面的例子是一个Object的子类,定义了两个属性,stringProp和intProp,但并没有把它们指定为可绑定的:
ACTIONSCRIPT3 show/hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package myComponents
{
// binding/myComponents/NonBindableObject.as
// Make no class properties bindable.
public class NonBindableObject extends Object {
public function NonBindableObject() {
super();
}
public var stringProp:String = "String property";
public var intProp:int = 52;
}
}
因为这个类的属性不是可以绑定的,所以当他们的值改变时,Flex不会广播触发数据绑定的事件。看下面的例子:
<?xml version=”1.0″?><application xmlns:mx="”http://www.adobe.com/2006/mxml”" creationcomplete="”initObj();”"><script></script><text id="”text1″" text="”{myObj.stringProp}”/"><text id="”text2″" text="”{myObj.intProp}”/"><button label="”Change" myobj click="”myObj.stringProp" string></button>
<button label="”Change" myobj click="”myObj.intProp"></button>
<button label="”Change" myobj click="”myObj" anotherobj></button>
</text></text></application>
其运行结果如下:
Flash Content:Click Here to Show/Hide
由于你没有把NonBindableObject的单个字段做成可绑定的,这两个Text控件的数据绑定会在应用程序启动时、myObj被修改时,而不是myObj的单个字段被修改时更新。
当你编译这段代码时,编译器会输出警告语句:数据绑定机制无法侦测到stringProp和intProp的变化。
绑定到对象的属性
要使一个对象的属性成为可绑定的,你应该像下面这样定义类:
ACTIONSCRIPT3 show/hide
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package myComponents
{
// binding/myComponents/BindableObject.as
// Make all class properties bindable.
[Bindable]
public class BindableObject extends Object {
public function BindableObject() {
super();
}
public var stringProp:String = "String property";
public var intProp:int = 52;
}
}
通过把[Bindable]元数据标签放到类定义之前,就把所有使用变量定义的、使用getter/setter方法定义的公共属性做成了可绑定的。这样,就可以把stringProp和intProp用作数据绑定的源了,如下所示:
<?xml version=”1.0″?><application xmlns:mx="”http://www.adobe.com/2006/mxml”" creationcomplete="”initObj();”"><script></script><text id="”text1″" text="”{myObj.stringProp}”/"><text id="”text2″" text="”{myObj.intProp}”/"><button label="”Change" myobj click="”myObj.stringProp" string></button>
<button label="”Change" myobj click="”myObj.intProp"></button>
<button label="”Change" myobj click="”myObj" anotherobj></button>
</text></text></application>
其运行结果如下:
Flash Content:Click Here to Show/Hide
用数组做绑定
当使用数组,如Array或ArrayCollection对象时,你可以把数组用作数据绑定表达式的源或目标。
注意:当使用数组作为数据绑定表达式的源时,数组的类型应该时ArrayCollection,因为当数组或数组元素更新时,ArrayCollection会广播触发数据绑定的事件。比如,调用ArrayCollection.addItem()、ArrayCollection.addItemAt()、ArrayCollection.removeItem()、ArrayCollection.removeItemAt()都会触发数据绑定。
绑定到数组
你经常会把数组绑定到Flex控件的dataProvider属性上,如下所示:
<application xmlns:mx="”http://www.adobe.com/2006/mxml”"><script></script><list dataprovider="”{myAC}”/"><button label="”Change" element click="”myAC[0]=’mod" one></button>
<button label="”Add" element click="”myAC.addItem(‘new"></button>
<button label="”Remove" element click="”myAC.removeItemAt(0);”/"><button label="”Change" arraycollection click="”myAC=myAC2″/"></button></button></list></application>
其运行结果如下:
Flash Content:DOWNLOAD:Click Here to Show/Hide
本例定义了一个ArrayCollection对象,然后使用数据绑定把List控件的数据提供者指定为该ArrayCollection。当你修改ArrayCollection对象中的元素的值的时候,或者当修改ArrayCollection对象的引用的时候,都会触发数据绑定。
绑定到数组元素
你可以把ArrayCollection的单个元素用作源或数据绑定表达式,如下例子所示:
<?xml version=”1.0″?><application xmlns:mx="”http://www.adobe.com/2006/mxml”"><script></script><text id="”text1″" text="”{myAC[0]}”/"><text id="”text2″" text="”{myAC.getItemAt(0)}”/"><button id="”button1″" label="”Change" element click="”myAC[0]=’new" one></button>
<button id="”button2″" label="”Change" arraycollection click="”myAC=myAC2″/"></button></text></text></application>
其运行结果如下:
Flash Content:Click Here to Show/Hide
如果你使用中括号语法,[],把数组的元素指定为数据绑定表达式的源时,只有当应用程序启动、数组或数组的引用发生改变时,才会触发数据绑定;当这个单独的数组元素改变时,不会触发数据绑定。
但是,当数组元素改变时,数据绑定表达式myAC.getItemAt(0)会被触发。因此,当点击button1时,Text控件text2会更新,text1不会。当想把数组的元素用作数据绑定表达式源时,应该使用ArrayCollection.getItemAt()用在数据绑定表达式中。
点击button2,把myAC2拷贝给myAC,会触发所有到数组元素的绑定,而不管你是如何实现的它们。
分享到:
相关推荐
封装是面向对象编程的一个重要概念,它涉及到将对象的状态(属性)和行为(方法)绑定在一起,对外隐藏对象的实现细节。在JavaScript中,虽然没有类,但可以通过构造函数和原型链来实现封装。封装的好处在于它可以...
Json数据通常以键值对的形式存在,可以通过递归解析Json对象和数组,将它们转换为树形结构,其中键作为节点名,值作为节点内容。 Xml(eXtensible Markup Language)文件是一种用于存储结构化数据的标准格式,常...
7. **集合与数组的处理**:Java中的集合(如List、Set)和数组可以映射到XML的元素列表。JAXB会自动处理这些集合的序列化和反序列化。 8. **包容性处理**:对于复杂的XML结构,JAXB提供了包容性处理,允许将XML元素...
8. **缓冲区和数组对象**:WebGL使用缓冲区对象来存储数据,数组对象用于绑定一组相关缓冲区。辅助函数可能包括创建、绑定、更新和删除这些对象的代码。 9. **深度和模板测试**:为了实现复杂的渲染效果,辅助函数...
4. **剩余参数和扩展运算符**:`...rest`允许我们收集函数的所有剩余参数到一个数组中,而`...`在数组或对象前用于展开它们的元素,这在函数调用和数组操作中非常实用。 5. **函数绑定**:`Function.prototype.bind...
- **字符串解析**:对于简单的JSON字符串,可以使用`JSONObject`类的构造函数,将JSON格式的字符串转换为对象,然后通过`get()`方法获取键值。 - **数组解析**:JSON数组可以用`JSONArray`表示,通过`...
这些文件名揭示了JavaScript的不同学习章节和实践应用,包括对象和数组操作、面向对象编程、事件处理、原型、正则表达式以及前端项目的实现。 1. **对象和数组**:在15章中,讲解了JavaScript中的对象和数组。这是...
2.4.6 绑定到函数、对象和数组 2.4.7 使用可绑定属性链进行工作 2.5 Flex中的组件化编程 2.5.1 认识Flex组件和组件容器 2.5.2 组件生命周期与布局 2.5.3 组件的失效机制 2.5.4 使用ActionScript...
2.4.6 绑定到函数、对象和数组 2.4.7 使用可绑定属性链进行工作 2.5 Flex中的组件化编程 2.5.1 认识Flex组件和组件容器 2.5.2 组件生命周期与布局 2.5.3 组件的失效机制 2.5.4 使用ActionScript...
数据类型包括基本类型(如字符串、数字、布尔值、null和undefined)和引用类型(如对象和数组)。在处理数据时,我们常会用到算术、比较和逻辑操作符,以及用于对象和数组操作的赋值、解构赋值等。 在“JS练习代码...
- 变量和数据类型:JavaScript支持基本数据类型(如字符串、数字、布尔值)以及引用类型(如对象和数组)。 - 函数:JavaScript中的函数是第一类公民,可以作为变量赋值、作为参数传递或作为返回值。 2. **...
书中也讨论了类型转换、函数的高级特性如闭包和递归,以及如何构建和管理数据结构,如对象和数组。 在数据类型方面,书里讲解了JavaScript中的基本数据类型,例如数字和字符串,以及它们的操作方式。同时,也讨论了...
Default Constructors和数组 6.2 new和delete运算符 针对数组的new语意 Placement Operator new的语意 6.3 临时性对象(Temporary Objects) 临时性对象的迷思(神话、传说) 第7章 站在对象模型的类端(On the Cusp...
Default Constructors和数组 6.2 new和delete运算符 针对数组的new语意 Placement Operator new的语意 6.3 临时性对象(Temporary Objects) 临时性对象的迷思(神话、传说) 第7章 站在对象模型的类端(On the Cusp...
5.5 指针和数组 5.6 多级间址 5.7 初始化指针 5.8 指向函数的指针 5.9 C语言的动态分配函数 5.10 指针应用中的问题 第6章 函数 6.1 函数的一般形式 6.2 数作用域的规则 6.3 函数变元 6.4 传给main()的变元argc和...
函数编译并运行JavaScript 保存并加载预编译的脚本数据使用全局对象模板创建JavaScript上下文在Go中操作JavaScript对象属性和数组元素使用属性访问器和拦截器在Go中定义JavaScript对象模板在Go中定义JavaScript函数...
Iterator 可以帮助开发者更方便地遍历对象和数组,避免了传统的 for 循环问题。 ES6 中引入了许多新的语法特性和功能,以提高开发效率和代码可读性。本文总结了 ES6 的基础语法,旨在帮助开发者快速了解和掌握 ES6 ...
5. bind、call、apply 的区别:bind 返回绑定函数,call 和 apply 返回函数执行结果。 6. 闭包:函数嵌套,内部函数可以访问外部函数的变量。 7. async/await 的使用方法和原理:async/await 是 promise 的语法糖,...
- **可变性**:对象和数组都是可变的,可以直接修改其内容。 通过以上内容,我们可以看到,《Eloquent JavaScript》不仅提供了一个全面的JavaScript入门指南,而且还涵盖了更高级的主题和技术。这本书适合初学者...