如何验证使用ItemRenderer创建的某些DataGrid行

时间:2011-06-15 20:22:26

标签: flex actionscript flash-builder

我有一个DataGrid使用itemRenderer来显示DataGridColumn中的项目。 ItemRenderer在actionscript中创建,包含以下代码:

public class PromptingColumnRenderer extends Label {

    public function PromptingColumnRenderer()
    {
        super();
    }

    //When the data is empty, display the correct prompt
    override public function set data(newData:Object):void
    {
        super.data = newData;
        var value:String=data.value as String;
        var type:String=data.type as String;

        if (value=="") {
            this.setStyle("color","0x444444");
            this.setStyle("fontStyle","italic");
            if (type=="TEXT")
                this.text="Enter Text";
            else if (type=="NUMBER")
                this.text="Enter a Number";
            else
                this.text="Choose a Date";
        }
        else {
            this.setStyle("color","0x000000");
            this.setStyle("fontStyle","normal");
            this.text = value;
        }
    }
}

我使用以下mxml将其设置为DataGridColumn的ItemRenderer:

<mx:DataGridColumn id="valueCol" 
            itemRenderer="com.x.x.x.PromptingColumnRenderer" 
            dataField="value" sortable="false" editable="true"/>

在此DataGrid列中,我仅对设置了type =“NUMBER”字段的数据进行数字验证。问题是,当我尝试在NumberValidator actionscript代码中声明PromptingColumnRenderer时,视图会回收渲染器,而NumberValidator会尝试验证非数字行。 仅验证type =“NUMBER”字段设置的行的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

请勿在itemRenderer中进行验证。而是创建一个自定义itemEditor。这是用户进入字段输入新值时创建的部分。我相信它默认使用textInput。但是,您可以使用数字步进器,或使用带有numericValidator的TextInput。

Here is an article on itemRenderers

我认为这是最好的方法,但是如果您更喜欢坚持使用的内容,并在itemRenderer中进行验证,那么只需添加条件以防止在输入的值不是数字时进行验证。

概念上是这样的:

if(Number(this.text)){
 // run validator
} else {
 // do nothing
}