我创建了一个 AdvancedDataGrid,其中 HierarchicalData 作为 DataProvider。为数据提供程序中的@value字段添加我自己的项目编辑器。
一切正常,如果没有设置任何值,背景设置为红色,值设置为 n/a但是逗号的替换不起作用。如果有人能帮助我解决这个问题,我会很高兴。
这是我 MyItemEditor.as 课:
import mx.controls.dataGridClasses.DataGridListData;
import mx.controls.TextInput;
public class MyItemEditor extends TextInput {
override public function set data(value : Object) : void {
if (value == null || value[DataGridListData(listData).dataField] == null)
return;
super.data = value;
if (String(value[DataGridListData(listData).dataField]).length == 0) {
setStyle("backgroundColor", "#FF0000");
value[DataGridListData(listData).dataField] = "n/a";
} else if (String(value[DataGridListData(listData).dataField]).indexOf(',') > -1) {
/** worked */
setStyle("backgroundColor", "#FFFF00");
/** does not work */
//value[DataGridListData(listData).dataField].replace(',', '.');
//String(value[DataGridListData(listData).dataField]).replace(',', '.');
//value[DataGridListData(listData).dataField].replace(/,/, '.');
String(value[DataGridListData(listData).dataField]).replace(/,/, '.');
} else {
setStyle("backgroundColor", "#FFFFFF");
}
}
}
还有我的测试.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init_data()">
<mx:Script>
<![CDATA[
import mx.collections.HierarchicalData;
[Bindable] private var xmlData : XMLList;
[Bindable] private var xmlDP : HierarchicalData;
private function init_data() : void {
xmlData =<>
<item name="Project 1">
<valuetype name="Spannung" value="5" unit="V" />
<valuetype name="Widerstand" value="500" unit="Ohm" />
<valuetype name="Stromstaerke" value="0,01" unit="A" />
</item></>;
xmlDP = new HierarchicalData(xmlData);
}
]]>
</mx:Script>
<mx:HBox width="100%" height="100%">
<mx:AdvancedDataGrid
id="dataGrid"
height="100%"
width="75%"
rowHeight="25"
dataProvider="{xmlDP}"
folderClosedIcon="{null}"
folderOpenIcon="{null}"
defaultLeafIcon="{null}"
editable="true"
draggableColumns="false">
<mx:groupedColumns>
<mx:AdvancedDataGridColumn
editable="false"
headerText="Name"
dataField="@name"
minWidth="500"/>
<mx:AdvancedDataGridColumn
editable="true"
headerText="Wert"
dataField="@value"
minWidth="125"
rendererIsEditor="true"/>
<mx:AdvancedDataGridColumn
editable="false"
headerText="Einheit"
dataField="@unit"
minWidth="125"/>
</mx:groupedColumns>
<mx:rendererProviders>
<mx:AdvancedDataGridRendererProvider
depth="2"
columnIndex="1"
columnSpan="1"
renderer="MyItemEditor"/>
</mx:rendererProviders>
</mx:AdvancedDataGrid>
<mx:Tree id="dataTree" defaultLeafIcon="{null}"
dataProvider="{XML(xmlData).children()}"
labelField="@value" height="100%" width="25%"/>
</mx:HBox>
该树用于检查是否设置了值。有时第一次不会设置该值。伊斯特也有点奇怪。
在 Flex 中(与大多数现代语言一样),字符串是不可变的。replace()
方法不会更改应用该方法的字符串,但会创建一个保存结果的新 String。
result = original.replace(',', '.');