1

我正在使用一些自定义组件构建一个 Flex 应用程序,我认为这会搞砸事情。我正在尝试sortByColumn在火花数据网格中,使用此处的答案作为模板。当我尝试在函数中使用以下内容时,

myGrid.sortByColumns(0,true);

我得到错误:

1061: Call to a possibly undefined method sortByColumns through a 
reference with static type com.components:MyReportGrid.

有谁知道如何消除这个错误?是否MyReportGrid以某种方式掩盖了火花组件的正确位置?在使用其他一些函数(例如 invalidateCell())时,我也会收到“未定义的方法”错误,不确定它是否与此错误有关。

我的数据网格如下所示:

...
<components:MyReportGrid id="myGrid" dataProvider="{_myData}"...>
    <components:columns>
        <fx:Array>
            <supportClasses:MyColumn ... />
            <supportClasses:MyColumn ... />
            <supportClasses:MyColumn ... />
            ...

其中 MyColumn 是一个类,如下所示:

import spark.components.gridClasses.GridColumn;
public class MyColumn extends GridColumn
{
    ...
    public function MyColumn(headerText:String="header" width:Number=100 ...)
    {
       this.headerText=headerText;
       ...
    }
}

MyReportGrid 是:

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"    
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx"
         width="400" height="300">
   import com.components.myClasses.MyColumn;
   import com.itemRenderers.myItemRenderer;
   import mx.collections.ArrayCollection;
   import mx.collections.ArrayList;
   import mx.collections.ListCollectionView;
   import spark.components.gridClasses.GridColumn;
   ...
   <s:DataGrid width="100%" ... />
</s:Group>
4

2 回答 2

5

这永远不会起作用,因为您正在调用基本类型myGrid.sortByColumns(0,true);的组件。MyReportGridGroup

AGroup没有调用任何方法sortByColumns

所以你可以:

  • 在 MyReportGrid 组件中创建一个委托方法

    <?xml version="1.0" encoding="utf-8"?>
    <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"    
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"
     width="400" height="300">
      import com.components.myClasses.MyColumn;
      import com.itemRenderers.myItemRenderer;
      import mx.collections.ArrayCollection;
      import mx.collections.ArrayList;
      import mx.collections.ListCollectionView;
      import spark.components.gridClasses.GridColumn;
      ...
    
       <mx:Script>
         <![CDATA[
         public function sortByColumns(columnIndices:Vector.<int>, isInteractive:Boolean = false):Boolean{
             return internalGroupGrid.sortByColumns(columnIndices,isInteractive);
         }
         ]]>
       </mx:Script>
    
       <s:DataGrid width="100%" id="internalGroupGrid"... />
    </s:Group>
    
  • 使 DataGrid 成为 MyReportGrid 组件的根标记

    <?xml version="1.0" encoding="utf-8"?>
    <s:DataGrid xmlns:fx="http://ns.adobe.com/mxml/2009"    
             xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:mx="library://ns.adobe.com/flex/mx"
             width="400" height="300">
        import com.components.myClasses.MyColumn;
        import com.itemRenderers.myItemRenderer;
        import mx.collections.ArrayCollection;
        import mx.collections.ArrayList;
        import mx.collections.ListCollectionView;
        import spark.components.gridClasses.GridColumn;
        ...
    </s:DataGrid>
    
于 2012-05-09T07:42:05.333 回答
1

嗯,如果不查看完整上下文中的代码(包括构建脚本和层次结构),很难给出良好的响应。但是,据我所知,编译器似乎缺少有关 MyReportGrid 对象类型的信息。它是扩展了具有该功能的东西还是实现了“sortByColumns”功能?

如果您正在寻找一种摆脱“类型提示”的方法,您可以随时执行“myGrid["sortByColumns"](0, true)"

但是,不建议这样做;)

顺便说一句,在你的解释中,你正在写一些关于 MyDataGrid 的东西,这让我迷失了一段时间,直到我意识到这是一个错字。

我很确定您必须明确表明您的类“com.components:MyReportGrid”直接或通过扩展实现了该功能。

于 2012-05-09T07:36:02.697 回答