FLEX 数据绑定专题三(转)

4. 使用Bindable 元数据标记
当属性成为数据绑定表达式源时,Flex 在源属性发生变化时自动将源属性的值拷贝给目的
属性。为了告知Flex 去执行这个拷贝工作,必须用[Bindable]元数据标记将这个属性注册到
Flex 中,并且源属性必须发出一个事件。
[Bindable] 元数据标记语法如下:
[Bindable]
[Bindable(event="eventname")]
如果忽略事件名称,Flex 会自动创建一个名为propertyChange,类型为
PropertyChangeEvent 的事件。
可以在三个地方使用[Bindable]元数据标记:
1. 在public 类定义之前使用。
在这个地方使用[Bindable]元数据标记使得类中定义的全部public 变量以及同时具
有setter 和getter 方法的public 属性能成为数据绑定表达式的源。这种情况下,
[Bindable]不使用任何参数,如下例所示:
[Bindable]
public class TextAreaFontControl extends TextArea {}
Flex 编译器自动为所有public 属性生成名为propertyChange,类型为
PropertyChangeEvent 的事件,以使这些属性可以被用于数据绑定表达式的源。
如果对属性进行写操作的时候属性值保持不变,Flex 不会发出事件或者更新属
性,这里判断属性是否不同可以翻译为如下的检测语句:
(oldValue !== value)
这意味着,如果属性包含了一个对象引用,并且引用被更改为引用了一个不同但
是等价的对象,那么绑定也会被触发。如果属性没有被改变,而它所指向的对象在
内部发生了变化,那么绑定不会被触发。
注意:在public class 定义之前使用[Bindable]元数据标记只是将绑定作用于
public 属性,它不会作用于private 和protected 属性以及那些定义在其他
namespace 中的属性。必须在非public 属性前插入[Bindable]元数据标记,才能使
之成为数据绑定表达式的源。
2. 在public,protected 或者private 属性之前使用该标记可以将这个特定的属性定
义为支持数据绑定,标记可以有以下的形式:
[Bindable]
public var foo:String;
Flex 编译器自动为那个属性产生名为propertyChange,类型为PropertyChangeEvent
的事件,如果写入的属性值不变,Flex 不会发出事件或者更新属性。也可以在
[Bindable]元数据标记中指定事件名,如下的例子所示:
[Bindable(event="fooChanged")]
public var foo:String;
这种情况下,开发者要自己负责产生和发出事件,通常在类的其他方法中完成
这些工作。尽管在类的级别上指定了[Bindable]标记,如果想要为事件命名,仍然
可以在[Bindable]中包含指定名称的事件。
3. 在由getter 或者setter 方法所定义的public,protected 或者private 属性之前
使用该标记。这种情况下,要想使用[Bindable]标记必须为属性同时定义setter 和
getter 方法。如果只是定义了一个setter 方法,那么你就创建了一个“只写”属性,
这样的属性不能作为数据绑定表达式的源。如果只定义getter 方法,那么就创建了
一个“只读”属性,把只读属性当作数据绑定源而不插入[Bindable]标记,就如同
使用了一个用const 关键字定义的变量来作为数据绑定表达式的源。(这样的绑定
源只能在应用启动时触发绑定一次,以后就不会再触发)。
这个标记可以由下面的形式定义:
[Bindable]
public function set shortNames(val:Boolean):void {
...
}
public function get shortNames():Boolean {
...
}
Flex 编译器自动为这个属性产生一个名为propertyChange,类型为
PropertyChangeEvent 的事件。如果属性值在写入的时候保持不变,Flex 不会发出
事件或者更新属性。为了确定属性是否变化,Flex 调用getter 方法来获取属性的当
前值。
也可以为事件指定名称,如下例所示:
[Bindable(event="changeShortNames")]
public function set shortNames(val:Boolean):void {
...
// Create and dispatch event.
dispatchEvent(new Event("changeShortNames"));
}
// Get method.
public function get shortNames():Boolean {
...
}
这种情况下,开发者要负责生成和发出事件。通常是在setter 方法中完成这个工作。
并且Flex 不会检查旧值和新值是否不同。尽管在类的级别上指定了[Bindable]标记,如果
想要为事件命名,仍然可以在[Bindable]中包含指定名称的事件。
下面的代码使以变量形式定义的maxFontSize 和minFontSize 属性可以作为数据绑定的
源:
// Define public vars for tracking font size.
[Bindable]
public var maxFontSize:Number = 15;
[Bindable]
public var minFontSize:Number = 5;
在下面的例子中,使setter 和getter 方法形式定义的public 属性成为数据绑定的源。
[Bindable]元数据标记中引入了属性变化时由setter 方法发出的事件:
// Define private variable.
private var _maxFontSize:Number = 15;
[Bindable(event="maxFontSizeChanged")]
// Define public getter method.
public function get maxFontSize():Number {
return _maxFontSize;
}
// Define public setter method.
public function set maxFontSize(value:Number):void {
if (value <= 30) {
_maxFontSize = value;
} else _maxFontSize = 30;
// Create event object.
var eventObj:Event = new Event("maxFontSizeChanged");
dispatchEvent(eventObj);
}
在这个例子中,setter 更新了属性的值,然后创建并发出了一个事件来激发对数据绑定目的
属性的更新。
在MXML 文件中,通过在<mx:Metadata>块中引入[Bindable]元数据标记,就可以将所有以变量
形式定义的public 属性成为数据绑定的源,例子如下:
<mx:Metadata>
[Bindable]
</mx:Metadata>
在<mx:Script>块中也可以在使用[Bindable]元数据标记使单个的变量形式定义的属性成
为数据绑定表达式的源。另外,也可以对setter 及getter 方法定义的属性使用[Bindable]元
数据标记,使之成为数据绑定表达式的源。
将只读属性作为数据绑定的源
使用getter 方法而没有setter 就可以自动定义一个只读属性作为数据绑定表达式的源。
Flex 只在应用启动时执行一次数据绑定。因为来自于只读属性的数据绑定只在应用启动时发生
一次,所以可以对只读属性省略[Bindable]元数据标记。
用静态属性作为数据绑定源
可以将静态属性作为数据绑定表达式的源,Flex 在应用启动时执行一次数据绑定,然后在
静态属性发生变化的时候再执行数据绑定。
可以将静态常量自动作为数据绑定表达式的源,Flex 只在应用启动时执行一次数据绑定。因
为数据绑定只在应用启东时发生一次,所以可以对静态常量省略[Bindable]元数据标记。下面
例子使用静态常量作为数据绑定表达式的源。
<?xml version="1.0"?>
<!-- binding/StaticBinding.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
// This syntax casues a compiler error.
// [Bindable]
// public static var varString:String="A static var.";
public static const constString:String="A static const.";
]]>
</mx:Script>
<!-- This binding occurs once at application startup. -->
<mx:Button label="{constString}"/>
</mx:Application>
使用可绑定属性链进行工作
当指定一个属性作为数据绑定表达式的源时,Flex 不仅监控这个属性的变化,也会监控这
个由这个属性作为开始点的属性链的变化。整个属性链,包括源属性,被称为“可绑定的属性
链”。在下面的例子中,firstName.text 是一个可绑定的属性链:
<mx:Text id="myText" text="{firstName.text}"/>
开发者可以使用很长的属性链,如下例所示:
<mx:Text id="myText" text="{user.name.firstName.text}"/>
只有当text 属性是可绑定的,数据绑定机制才能检查text 属性的变化。但是,如果在运
行时,想要向属性链中的部分属性赋予新值,那么属性链中的每个属性都必须是可绑定的,才
能使数据绑定机制起作用。否则,在运行时更改user,name 或者firstName 属性会导致数据绑
定机制无法检查text 属性的变化。
在使用BindingUtils.bindProperty()或者BindingUtils.bindSetter()方法时,可以将可
绑定的属性链作为方法的参数,例如,bindProperty()方法有以下的声明:
public static function bindProperty(site:Object, prop:String, host:Object,
chain:Object, commitOnly:Boolean = false):ChangeWatcher
Host 和chain 属性指定了数据绑定表达式的源。使用bindProperty()方法可以定义一个
数据绑定表达式,如下:
bindProperty(myText, 'text', user, ["name","firstName","text"]);
这个例子中,["name","firstName","text"]定义了相对于user 对象的可绑定属性链。注
意,在本例中,user 不是可绑定属性链的一部分。
在MXML 数据绑定表达式中,可绑定属性连总是相对于this。因此,要想定义一个同上面的
MXML 等价的数据绑定表达式,应按如下例子使用bindProperty()方法:
bindProperty(myText, 'text', this, ["user", "name","firstName","text"]);
内容概要:本文详细介绍了一种基于Simulink的表贴式永磁同步电机(SPMSM)有限控制集模型预测电流控制(FCS-MPCC)仿真系统。通过构建PMSM数学模型、坐标变换、MPC控制器、SVPWM调制等模块,实现了对电机定子电流的高精度跟踪控制,具备快速动态响应和低稳态误差的特点。文中提供了完整的仿真建模步骤、关键参数设置、核心MATLAB函数代码及仿真结果分析,涵盖速、电流、矩和相电流波形,验证了MPC控制策略在动态性能、稳态精度和抗负载扰动方面的优越性,并提出了参数自整定、加权代价函数、模型预测矩控制和弱磁扩速等优化方向。; 适合人群:自动化、电气工程及其相关专业本科生、研究生,以及从事电机控制算法研究与仿真的工程技术人员;具备一定的电机原理、自动控制理论和Simulink仿真基础者更佳; 使用场景及目标:①用于永磁同步电机模型预测控制的教学演示、课程设计或毕业设计项目;②作为电机先进控制算法(如MPC、MPTC)的仿真验证平台;③支撑科研中对控制性能优化(如动态响应、抗干扰能力)的研究需求; 阅读建议:建议读者结合Simulink环境动手搭建模型,深入理解各模块间的信号流向与控制逻辑,重点掌握预测模型构建、代价函数设计与开关状态选择机制,并可通过修改电机参数或控制策略进行拓展实验,以增强实践与创新能力。
根据原作 https://pan.quark.cn/s/23d6270309e5 的源码改编 湖北省黄石市2021年中考数学试卷所包含的知识点广泛涉及了中学数学的基础领域,涵盖了实数、科学记数法、分式方程、几何体的视图、立体几何、概率统计以及代数方程等多个方面。 接下来将对每道试题所关联的知识点进行深入剖析:1. 实数与倒数的定义:该题目旨在检验学生对倒数概念的掌握程度,即一个数a的倒数表达为1/a,因此-7的倒数可表示为-1/7。 2. 科学记数法的运用:科学记数法是一种表示极大或极小数字的方法,其形式为a×10^n,其中1≤|a|<10,n为整数。 此题要求学生运用科学记数法表示一个天文单位的距离,将1.4960亿千米换为1.4960×10^8千米。 3. 分式方程的求解方法:考察学生解决包含分母的方程的能力,题目要求找出满足方程3/(2x-1)=1的x值,需通过消除分母的方式化为整式方程进行解答。 4. 视图的辨认:该题目测试学生对于几何体视图(主视图、左视图、俯视图)的认识,需要识别出具有两个相同视图而另一个不同的几何体。 5. 立体几何与表面积的计算:题目要求学生计算由直角角形旋形成的圆锥的表面积,要求学生对圆锥的底面积和侧面积公式有所了解并加以运用。 6. 统计学的基础概念:题目涉及众数、平均数、极差和中位数的定义,要求学生根据提供的数据信息选择恰当的统计量。 7. 方程的整数解求解:考察学生在实际问题中进行数学建模的能力,通过建立方程来计算在特定条件下帐篷的搭建方案数量。 8. 角学的实际应用:题目通过在直角角形中运用角函数来求解特定线段的长度。 利用正弦定理求解AD的长度是解答该问题的关键。 9. 几何变换的应用:题目要求学生运用角板的旋来求解特定点的...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值