我有一个屏幕有几个组件(textInput,textArea,checkBox)。我想检查组件是否有任何更改。敌人示例,如果文本已被输入或复选框已被点击。在任何元素中获取更改
有没有直接的方法来做到这一点,而不是检查每个部件的价值,然后设置一个布尔这个的?
谢谢
我有一个屏幕有几个组件(textInput,textArea,checkBox)。我想检查组件是否有任何更改。敌人示例,如果文本已被输入或复选框已被点击。在任何元素中获取更改
有没有直接的方法来做到这一点,而不是检查每个部件的价值,然后设置一个布尔这个的?
谢谢
你列出的三个Spark组件(TextInput之文本区域,复选框)所有侦听change事件。只需调用一个函数,以便在每个组件发生更改事件时得到通知,如下所示:
<s/TextInput change="myTextInputChangeHandler(event)"/>
<s/TextArea change="myTextAreaChangeHandler(event)"/>
<s/CheckBox change="myCheckBoxChangeHandler(event)"/>
您可以创建一些包含数据和跟踪更改的类。并使用双向绑定将控件与此数据对象字段绑定。
为您的数据对象的基类可以如下所示:
public class DataObjectsBase extends EventDispatcher
{
protected function setNewSetterValue(propertyName:String, value:Object):void
{
var internalPropertyName:String = "_" + propertyName;
var oldValue:Object = this[internalPropertyName];
if (oldValue == value)
return;
this[internalPropertyName] = value;
dispatchUpdateEvent(propertyName, oldValue, value);
}
protected function dispatchUpdateEvent(propertyName:String, oldValue:Object, value:Object):void
{
makeChanges();
dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, propertyName, oldValue, value));
}
protected function makeChanges():void
{
if (!_changed)
{
_changed = true;
dispatchEvent(new Event("changedChanged"));
}
}
public function resetChanges():void
{
_changed = false;
dispatchEvent(new Event("changedChanged"));
}
private var _changed:Boolean = false;
[Bindable("changedChanged")]
public function get changed():Boolean
{
return _changed;
}
}
这实现依赖于命名下列类型的约定:
public class MyDataImplementation extends DataObjectsBase
{
private var _comment:String = "";
[Bindable(event = "propertyChange")]
public function get comment():String
{
return _comment;
}
public function set comment(value:String):void
{
setNewSetterValue("comment", value);
}
}
所以私有字段应该被命名为相同作为访问者,但以下划线开头。
如果您填写您的数据类的几个字段(字符串,布尔值等),你可以用它的方式如下:
<fx:Script>
<![CDATA[
[Bindable]
private var personalInfo:PersonalInfo /* extends our DataObjectsBase */;
]]>
</fx:Script>
<s:TextInput text="@{personalInfo.firstName}" />
<s:CheckBox selected="@{personalInfo.receivePromotions}" />
<s:Button label="Apply" enabled="{personalInfo.changed}" />
这段代码仅仅是一个草案,但我希望你的想法:)
您可以在每个组件上注册事件侦听器来自动侦听更改。
如果您试图弄清楚某个特定时间(或最后一次检查的实例)是否发生更改,唯一的方法(我知道)将存储之前的输入(输入散列)并将其与当前输入(当前输入的散列)。
Thx sir ..我也试过这个:) – FlexBoz 2011-05-19 10:54:18