2011-05-18 37 views
1

我有一个屏幕有几个组件(textInput,textArea,checkBox)。我想检查组件是否有任何更改。敌人示例,如果文本已被输入或复选框已被点击。在任何元素中获取更改

有没有直接的方法来做到这一点,而不是检查每个部件的价值,然后设置一个布尔这个的?

谢谢

回答

1

你列出的三个Spark组件(TextInput之文本区域,复选框)所有侦听change事件。只需调用一个函数,以便在每个组件发生更改事件时得到通知,如下所示:

<s/TextInput change="myTextInputChangeHandler(event)"/> 
<s/TextArea change="myTextAreaChangeHandler(event)"/> 
<s/CheckBox change="myCheckBoxChangeHandler(event)"/> 
0

您可以创建一些包含数据和跟踪更改的类。并使用双向绑定将控件与此数据对象字段绑定。

为您的数据对象的基类可以如下所示:

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}" /> 

这段代码仅仅是一个草案,但我希望你的想法:)

+0

Thx sir ..我也试过这个:) – FlexBoz 2011-05-19 10:54:18

0

您可以在每个组件上注册事件侦听器来自动侦听更改。

如果您试图弄清楚某个特定时间(或最后一次检查的实例)是否发生更改,唯一的方法(我知道)将存储之前的输入(输入散列)并将其与当前输入(当前输入的散列)。

相关问题