加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

转发器中的Flex Datagrid – 数据绑定警告

发布时间:2020-12-15 01:45:48 所属栏目:百科 来源:网络整理
导读:在我的Flex应用程序中,我使用转发器来显示有关我的数据库数据的报告.在此报告中,用户可以“深入”查看数据以显示更多详细信息.为了使眼睛更容易,我有一个标题标签,然后是转发器中的数据网格. 虽然这很好用,但因为datagrid的数据提供者来自转发器dataprovider
在我的Flex应用程序中,我使用转发器来显示有关我的数据库数据的报告.在此报告中,用户可以“深入”查看数据以显示更多详细信息.为了使眼睛更容易,我有一个标题标签,然后是转发器中的数据网格.

虽然这很好用,但因为datagrid的数据提供者来自转发器dataprovider中的数组,所以它会引发以下警告:

数据绑定将无法检测到“报告”的分配

警告是针对此行的:

<mx:DataGrid id="dgReport" dataProvider="{rptReport.currentItem.report}" rowCount="{rptReport.currentItem.report.length}">

以下是我的代码,如果有人对我如何摆脱警告有任何建议/做到这一点,他们将是最受欢迎的!

<mx:Script>
    <![CDATA[
        [Bindable] private var reportProvider;

        private function report_Handler(event:ResultEvent):void {
            // Temp variables
            var currentHeader:String = "";
            var previousHeader:String = "";

            // Retrieve PHP array
            var reportPHP:Array = ArrayUtil.toArray(event.result);

            // Create Flex array
            var reportFlex:Array = [];
            var reportFlex_dataGrid:Array = [];

            // Loop through PHP array
            for(var i:int = 0; i < reportPHP.length; i++) {
                // Retrieve current header
                currentHeader = reportPHP[i].header;

                // Clear array
                if (currentHeader != previousHeader) {
                    reportFlex_dataGrid = [];
                }

                reportFlex_dataGrid.push({column1:reportPHP[i].column1,column2:reportPHP[i].column2,column3:reportPHP[i].column3});                               
            }

            // Add to repeater array
            if (currentHeader != previousHeader) {                          
                // Add to array
                reportFlex.push({header:reportPHP[i].header,report:reportFlex_dataGrid});
            }

            // Store previous headers
            previousHeader = reportPHP[i].header;

            // Add to combobox data provider
            reportProvider = new ArrayCollection(reportFlex);
        }                       
    ]]>
</mx:Script>

<mx:Repeater id="rptReport" dataProvider="{reportProvider}">
    <mx:VBox>
        <mx:Spacer height="5"/>

        <mx:Label id="lblHeader" text="{rptReport.currentItem.header}"/>

        <mx:DataGrid id="dgReport" dataProvider="{rptReport.currentItem.report}" rowCount="{rptReport.currentItem.report.length}">
            <mx:columns>
                <mx:DataGridColumn headerText="Column1" dataField="column1"/>
                <mx:DataGridColumn headerText="Column2" dataField="column2"/>
                <mx:DataGridColumn headerText="Column3" dataField="column3"/>
            </mx:columns>
        </mx:DataGrid>
    </mx:VBox>  
</mx:Repeater>

解决方法

Data binding will not be able to detect assignments to “report”

您的dataProvider是rptReport.currentItem.report.其中,作为mxml元素的rptReport是Bindable. Repeater组件的currentItem属性也声明为Bindable.当前项的report属性不可绑定 – 当前项本身只是一个对象.通过此警告,Flex表示如果将已分配对象的报告更改为其他对象,则不会自动反映在数据网格中.

在大多数情况下,您可以安全地忽略此类警告.

当你在mxml中说x =“{a.b.c.d}”时,保证flex将检测对链中的四个项目(a,b,c和d)中的任何一个所做的更改并更新x的值.换句话说,当a或a.b或b.c或c.d发生变化时,x将发生变化.为此,Flex期望所有这四个都被声明为可绑定.如果它发现任何这些项目不可绑定,它将发出警告.如果属性是使用mxml声明的,或者如果在ActionScript中使用[Bindable]元数据标记声明属性,则该属性是可绑定的.

在大多数情况下,人们只会对a或a.b.的变化感兴趣.在您的示例中,只有在重新发送HTTPService时才会发生更改,在这种情况下,dataProvider本身也会发生更改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读