as3 重用具有不同变量的 datagrid cellrenderer

Posted

技术标签:

【中文标题】as3 重用具有不同变量的 datagrid cellrenderer【英文标题】:as3 reuse datagrid cellrenderer with different variables 【发布时间】:2012-12-07 02:58:42 【问题描述】:

我有几个带有自定义单元格渲染器的非常大的数据网格。我面临的问题是我现在有 > 80 个,每个数据网格每列 1 个。

我很好奇是否有一种方法可以将这些简化为 1 个全局单元格渲染器,我可以将变量传递给该单元格渲染器以定义该列的单元格渲染器允许的内容。

即:

...
col1 = new DataGridColumn("PurchaseStartDate");
        col1.headerText = "Purchase Date (YYYY-MM)";
        dg.addColumn(col1);
            col1.width = 110;
            col1.editable = false;
            col1.sortable = false;
            col1.cellRenderer = Alternating_Row_Colours_editable36;
                Alternating_Row_Colours_editable36._dg = dg;
                Alternating_Row_Colours_editable36.__enabled = true;
                Alternating_Row_Colours_editable36._myCol = 12;
                Alternating_Row_Colours_editable36._isNum = 3;
                Alternating_Row_Colours_editable36._stage = this;
                Alternating_Row_Colours_editable36._maxChars = 9;

在单元格渲染器中,我使用所有这些变量来自定义允许的内容。 即:

...
public function Alternating_Row_Colours_editable36()
    
        super();
            if(_isNum == 0)
                restrict = "a-z A-Z @_,.0-9//-";
                maxChars = 64;
            else if (_isNum == 1)
                restrict = ".0-9";
                maxChars = 9;
            else if (_isNum == 2)
                restrict = "0-9";
                maxChars = 2;
            else if (_isNum == 3)
                restrict = "0-9 \\-";
                maxChars = 9;
            else if (_isNum == 4)
                restrict = "0-9. %";
                maxChars = 9;
            
            if(_maxChars != -1)
                maxChars = _maxChars;
            

如果你看上面的问题,我只是注意到我有一个错误。我使用“//-”而不是“\-”来转义连字符。现在我要进行 80 多项更改,每次尝试添加新内容时,回调、限制、最大字符、使其可编辑、擦除输入、将其从动态更改为输入并再次返回...

我很想知道是否有办法创建类的实例并使用该单元格渲染器。或者能够传递仅影响该列而不是所有列的变量。 我不是最好的,但我的印象是它可能只是我需要使用的 set/get 函数,或者将变量更改为 protected、private 或其他东西以获得所需的结果。

任何人都对如何控制这些 80 多个单元格渲染器有任何建议。因为我不期待需要对它们进行更改以进行排序......

jc

【问题讨论】:

【参考方案1】:

我知道这是一个很晚的回复,您现在很可能已经继续前进了!

您可以使用 CellRenderer 类的“listData”属性中的信息来完成:

// Create a private class level variable called _dataField...
private var _dataField:String;

// Assign the dataField...
public function set listData(value:ListData):void 
    _listData = value;                  

    this._dataField = DataGridColumn(DataGrid(this._listData.owner).columns[this._listData.column]).dataField;

    // set the data again now...
    this.data = _data;          

    invalidate(InvalidationType.DATA);
    invalidate(InvalidationType.STATE);


// Use the dataField when setting value from DataProvider...
public function set data(value:Object):void                         
    _data = value;          
    if (this._dataField != "")
    
        this.text = value[this._dataField]; 
                           

希望能满足任何好奇心。遗憾的是,他们首先不只是将该属性传递给 CellRenderer!

干杯

【讨论】:

以上是关于as3 重用具有不同变量的 datagrid cellrenderer的主要内容,如果未能解决你的问题,请参考以下文章

AS3 禁用 Datagrid 内 textInput 的可编辑/可选择

AS3:重用 URLLoader、URLRequest 和 URLVariables 实例

Flash as3:使具有相同AS的敌人移动方式不同

如何通过在同一位置映射两个变量来重用物理内存?

Windows CE 上的 C# .NET 3.5 CF,在 DataGrid 中更改行背景颜色

具有特定于案例值的 YAML 可重用变量