转发器中的Flex Datagrid – 数据绑定警告
在我的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> 解决方法
您的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本身也会发生更改. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |