我有一个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”字段设置的行的最佳方法是什么?
答案 0 :(得分:2)
请勿在itemRenderer中进行验证。而是创建一个自定义itemEditor。这是用户进入字段输入新值时创建的部分。我相信它默认使用textInput。但是,您可以使用数字步进器,或使用带有numericValidator的TextInput。
Here is an article on itemRenderers
我认为这是最好的方法,但是如果您更喜欢坚持使用的内容,并在itemRenderer中进行验证,那么只需添加条件以防止在输入的值不是数字时进行验证。
概念上是这样的:
if(Number(this.text)){
// run validator
} else {
// do nothing
}