簡體   English   中英

如何訪問 dataProvider 中的子對象

[英]How to access subobjects in dataProvider

當我有一個帶有數據提供者的數據網格時,如何訪問特定列的子對象? 我正在使用 Adobe Flash Builder 4.6。

我的數據樣本(為簡單起見,在 JSON 中):

{
   "Result":[
      {
         "Id":3644,
         "Amount":50,
         "SomeTimeFrom":null,
         "SomeTimeTo":null,
         "Interval":{
            "DateTimeFrom":"0001-01-01T00:00:00Z",
            "DateTimeTo":"0001-01-01T00:00:00Z"
         }
      },
      {
         "Id":3645,
         "Amount":50,
         "SomeTimeFrom":null,
         "SomeTimeTo":null,
         "Interval":{
            "DateTimeFrom":"0001-01-01T00:00:00Z",
            "DateTimeTo":"0001-01-01T00:00:00Z"
         }
      }
   ]
}

我的觀點:

    <mx:DataGrid id="dgvMain" width="100%" height="100%" editable="false" dataProvider="{_data}">
        <mx:columns>
            <mx:DataGridColumn headerText="L_ID" dataField="Id"/>
            <mx:DataGridColumn headerText="L_TIME_FROM" textAlign="center" labelFunction="formatTimeFromUtc" dataField="SomeTimeFrom"/>
            <mx:DataGridColumn headerText="L_TIME_TO" textAlign="center" labelFunction="formatTimeFromUtc" dataField="SomeTimeTo"/>
            <mx:DataGridColumn headerText="L_DATETIME_FROM" textAlign="center" labelFunction="formatDateFromUtc" dataField="Interval.DateTimeFrom"/>
            <mx:DataGridColumn headerText="L_DATETIME_TO" textAlign="center" labelFunction="formatDateFromUtc" dataField="Interval.DateTimeTo"/>
            <mx:DataGridColumn headerText="L_AMOUNT" dataField="Amount"/>
        </mx:columns>
    </mx:DataGrid>

本質上,我的所有列都正確呈現,除了“DateTimeFrom”和“DateTimeTo”(在間隔下)。 我是錯誤地訪問它們還是?

我設法自己弄清楚了。 我創建了一個新的 label function 一個

protected function formatDateFromUtcObject(data:Object, column:Object):String //convert from utc to user date
{               
    if (data != null)
    {
        // Check if it's a complex object with properties
        var columns:Array = column.dataField.split('.');

        var date:String = "";
        if (columns.length > 1)
        {
            date = data[columns[0]][columns[1]]; // I specifically know that my object has a subobject [0] with properties [1])
        }
        else
        {
            date = data[column.dataField]; // Else, access the direct property, since I am not trying to access a subobject
        }
        
        if (date != null && date != "")
        {
            var parsedDate:Date = DateTimeFromUtc(Util.invariantFormatter.parseDate(date)); // My case was date that I tried to parse, so that covers the format
            if (parsedDate == null)
                return "";
            else
                return Util.formatDate(parsedDate)
        } 
        else
        {
            return "";
        }
    }
    else
    {
        return "";
    }
}

之后,我在我的模板代碼中調用了 label function:

<mx:DataGridColumn headerText="L_DATETIME_FROM" textAlign="center" labelFunction="formatDateFromUtcObject" dataField="Interval.DateTimeFrom"/>
<mx:DataGridColumn headerText="L_DATETIME_TO" textAlign="center" labelFunction="formatDateFromUtcObject" dataField="Interval.DateTimeTo"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM