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



我创建了一个 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(',', '.');

相关内容

  • 没有找到相关文章

最新更新