使用自己的渲染器将Flex HierarchicalData中的点替换为逗号,因为itemEditor不起作用

时间:2013-12-17 18:09:00

标签: flex itemrenderer advanceddatagrid itemeditor

我使用HierarchicalData创建一个AdvancedDataGrid作为DataProvider。 为DataProvider中的@value字段添加我自己的itemEditor。

一切正常,如果没有设置值,背景设置为红色,值为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");
        }
    }
}

我的Test.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>

树将检查值是否已设置。 有时,第一次不会设置该值。我也有点奇怪。

1 个答案:

答案 0 :(得分:0)

在Flex中(与大多数现代语言一样),字符串是不可变的。 replace()方法不会改变应用它的字符串,但会创建一个保存结果的新String。

result = original.replace(',', '.');