首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误#2025年:提供的DisplayObject必须是调用方的子级

错误#2025年:提供的DisplayObject必须是调用方的子级
EN

Stack Overflow用户
提问于 2010-08-02 21:51:10
回答 1查看 2.4K关注 0票数 1

我对用FLEX编程非常陌生。我继承了一个FLEX 4项目,它调用web服务向最终用户显示数据。

我的默认包有一个.MXML文件,其中包含对登录屏幕(另一个.MXML文件)和主屏幕(是的,另一个.MXML文件)的组件引用。

登录过程运行良好。我有3个选项卡,第4个选项卡我现在正在添加。

选项卡是使用TabNavigator中的元素创建的。我增加了第四个VBOX,如下所示:

代码语言:javascript
复制
        <mx:VBox label="Data Analysis" width="100%" height="100%">
        <componenets:DeviceLineChart />
    </mx:VBox>

DeviceLineChart.mxml看起来如下所示:

代码语言:javascript
复制
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
            xmlns:charts="org.axiis.charts.*"
            layout="absolute"
            creationComplete="start();"
            xmlns:axiis="http://www.axiis.org/2009"
            xmlns:series="org.axiis.charts.series.*"
            xmlns:groupings="org.axiis.charts.groupings.*"
            xmlns:degrafa="http://www.degrafa.com/2008"
            xmlns:states="org.axiis.states.*"
            xmlns:paint="org.axiis.paint.*"
            xmlns:Examples="Examples.*"
            xmlns:axis="org.axiis.charts.axis.*"
            xmlns:labels="org.axiis.charts.labels.*"
            xmlns:utils="org.axiis.utils.*" viewSourceURL="srcview/index.html">

<mx:Style source="styles/Axiis_Examples.css"/>

<mx:Script>
    <![CDATA[
        import org.axiis.data.DataSet;

        private var ds:DataSet = new DataSet();

        public function start():void
        {
            ds.processCsvAsTable(payload, false);

            //LineSeriesGroup expects each unique series as a row
            //Since our data has the time entries on each row (a common format for temporal data) we want to pivot the data
            //This then makes a column for each unique time entrie and a row for each unique column.
            ds.pivotTable(0);
            dataProvider = ds.data.pivot.rows;
            hScale.dataProvider=ds.data.pivot.header.slice(1,dataSlice.value+1);
            hAxis.invalidateDataProvider();
            dc.invalidateDisplayList();
        }

        private function sliceData():void {
            hScale.dataProvider=ds.data.pivot.header.slice(1,dataSlice.value+1);
            hAxis.invalidateDataProvider();
            myLineGroup.invalidateDataProvider();
            dc.invalidateDisplayList(); 
        }

        private function axisLabel(obj:Object):String
        {
            return formatter.format(Number(obj) / 1000);
        }

        private function filterColumns(obj:Object):Boolean
        {
            //Don't want filter fields, trim columns
            if (obj.index < 1 || obj.index > dataSlice.value)
                return false;
            else
                return true;
        }

        private function filterRows(obj:Object):Boolean
        {
            //Trim our rows
            if (obj.pivotName == "Apples")
                return false;
            else
                return true;
        }
    ]]>
</mx:Script>

<mx:String id="payload" source="data/LineSeriesData.csv"/>

<mx:CurrencyFormatter currencySymbol="k"
                      precision="0"
                      id="formatter"
                      alignSymbol="right"
                      useThousandsSeparator="true"/>

<!--  GLOBAL VARIABLES -->
<mx:Object id="dataProvider"/>
<mx:String id="verticalField"/>
<mx:Number id="percentGap">.02</mx:Number>

<!--  EXPRESSIONS -->
<utils:NumericExpression id="tension" value="{slider.value/210}" valueChanged="{if (myLineGroup) dc.invalidateDisplayList();}"/>


<!-- CHART -->
<axiis:LinearScale id="vScale"
                   dataProvider="{dataProvider}"
                   minLayout="0"
                   maxLayout="{myLineGroup.height}"
                   />

<axiis:CategoricalScale id="hScale"
                        minLayout="0"
                        maxLayout="{myLineGroup.width}"
                        />

<axiis:DataCanvas width="80%"
                  id="dc"
                  top="120"
                  bottom="100"
                  horizontalCenter="0"
                  strokes="{strokes}"
                  fills="{fills}"
                  palettes="{palettes}"
                  showDataTips="true">

    <!-- Background -->
    <axiis:backgroundGeometries>
        <axis:VAxis id="vAxis"
                    verticalScale="{vScale}"
                    tickStroke="{axisStroke}"
                    width="{dc.width}"
                    height="{myLineGroup.height}"
                    showDataTips="false"
                    fontFamily="Myriad Pro"
                    fontColor="0"
                    fontSize="14"
                    tickGap="5"
                    majorTickSpacing="50"
                    labelFunction="{axisLabel}"/>
        <axiis:HCategoryAxis id="hAxis"
                             x="{myLineGroup.x}"
                             categoryScale="{this.hScale}"
                             width="{myLineGroup.width}"
                             dataProvider="{hScale.dataProvider}"
                             height="50"
                             y="{myLineGroup.height}"/>
        <degrafa:Line x="0"
                      x1="{myLineGroup.x+myLineGroup.width}"
                      y="{myLineGroup.height}"
                      y1="{myLineGroup.height}"
                      stroke="{axisStroke}"/>
    </axiis:backgroundGeometries>

    <!-- Layouts -->
    <axiis:layouts>
        <groupings:LineSeriesGroup id="myLineGroup"
                                   x="12"
                                   y="0"
                                   height="{dc.height-70}"
                                   width="{dc.width}"
                                   tension="{tension.value}"
                                   markerColor="{areaPalette.currentColor}"
                                   dataFilterFunction="{filterRows}"
                                   showArea="{area.selected}"
                                   plotFilterFunction="{filterColumns}"
                                   markerSize="8"
                                   showMarker="{showMarker.selected}"
                                   mode="{int(layoutGroup.selectedValue)}"
                                   dataProvider="{dataProvider}"
                                   plotCollection="columns"
                                   dataField="value"
                                   labelField="pivotName"
                                   xDataField="name"
                                   plotLabelField="name"
                                   verticalScale="{vScale}"
                                   horizontalScale="{hScale}"
                                   stroke="{myStroke}"
                                   fill="{areaFill}"
                                   enableRollOver="true"/>
    </axiis:layouts>
</axiis:DataCanvas>

<!--  FILLS & STROKES -->

<mx:Array id="palettes">
    <paint:LayoutAutoPalette id="outerPalette" layout="{myLineGroup}" colorFrom="0xCC3333" colorTo="0x3333CC"/>
    <paint:LayoutAutoPalette id="clusterPalette" layout="{myLineGroup}" colorFrom="{outerPalette.currentColor}" colorTo="{outerPalette.currentColor | 0x337f00}"/>
    <paint:LayoutAutoPalette id="areaPalette" layout="{myLineGroup}" colorFrom="0x3333CC" colorTo="0xCC3333"/>
</mx:Array>
<mx:Array id="fills">
    <degrafa:LinearGradientFill id="areaFill" angle="90" enableEvents="false">
        <degrafa:GradientStop color="{areaPalette.currentColor}" alpha=".95"/>
        <degrafa:GradientStop color="{areaPalette.currentColor | 0x999933}" alpha=".65"/>
    </degrafa:LinearGradientFill>
    <degrafa:LinearGradientFill id="clusterFill" angle="45" enableEvents="false">
        <degrafa:GradientStop color="{clusterPalette.currentColor}"/>
        <degrafa:GradientStop color="{clusterPalette.currentColor | 0xFFFFFF}" alpha=".85"/>
    </degrafa:LinearGradientFill>
</mx:Array>
<mx:Array id="strokes">
    <degrafa:LinearGradientStroke id="colStroke" pixelHinting="true" angle="45" enableEvents="false">
        <degrafa:GradientStop color="0xFFFFFF" alpha=".7"/>
        <degrafa:GradientStop color="0xFFFFFF" alpha=".3"/>
    </degrafa:LinearGradientStroke>
    <degrafa:SolidStroke color="0xFFFFFF" alpha=".3"/>
    <degrafa:SolidStroke color="0x222222" id="axisStroke" pixelHinting="true"/>
    <degrafa:SolidStroke color="{areaPalette.currentColor}"
                         id="myStroke"
                         weight="1"
                         alpha="1"
                         caps="none"
                         pixelHinting="true"/>
</mx:Array>

<!-- DISPLAY OBJECTS -->

<mx:HBox id="myBox" bottom="50" horizontalCenter="0">
    <mx:HBox>
        <mx:Label text="Line Curve" textAlign="right" verticalCenter="0"/>
        <mx:HSlider width="80"
                    id="slider"
                    minimum="1"
                    maximum="80"
                    value="35"
                    liveDragging="true"
                    showTrackHighlight="false"
                    verticalCenter="-5"/>
    </mx:HBox>
    <mx:Label text="|"/>
    <mx:HBox>
        <mx:Label text="% Data" textAlign="right" verticalCenter="0"/>
        <mx:HSlider width="80"
                    id="dataSlice"
                    minimum="3"
                    maximum="220"
                    value="30"
                    snapInterval="1"
                    change="{sliceData();}"
                    showTrackHighlight="false"
                    verticalCenter="-5"/>
    </mx:HBox>
    <mx:HBox>
        <mx:Label text="Label Rotation" textAlign="right" verticalCenter="0"/>
        <mx:HSlider width="80"
                    id="labelRotate"
                    minimum="0"
                    maximum="90"
                    value="0"
                    snapInterval="1"
                    change="{hAxis.labelRotation=labelRotate.value;dc.invalidateDisplayList();}"
                    showTrackHighlight="false"
                    verticalCenter="-5"/>
    </mx:HBox>
    <mx:Label text="|"/>
    <mx:HBox>
        <mx:Label text="Area" textAlign="right" verticalCenter="0"/>
        <mx:CheckBox id="area" change="{dc.invalidateDisplayList();}" selected="true"/>
    </mx:HBox>
    <mx:Label text="|"/>
    <mx:HBox>
        <mx:Label text="Marker" textAlign="right" verticalCenter="0"/>
        <mx:CheckBox id="showMarker" change="{dc.invalidateDisplayList();}"/>
    </mx:HBox>
    <mx:Label text="|"/>
    <mx:Spacer width="20"/>
    <mx:HBox>
        <mx:RadioButtonGroup id="layoutGroup" change="{dc.invalidateDisplayList();}"/>
        <mx:RadioButton label="Overlay" group="{layoutGroup}" value="{LineSeriesGroup.MODE_BASELINE}" selected="true"/>
        <mx:RadioButton label="Stack" group="{layoutGroup}" value="{LineSeriesGroup.MODE_STACK_ZERO}"/>
        <mx:RadioButton label="Flow" group="{layoutGroup}" value="{LineSeriesGroup.MODE_STACK_FLOW}"/>
    </mx:HBox>
</mx:HBox></mx:Application>

我已经在我的项目中实现了一个Axiis线图,我认为这很酷。但是我在实现它方面遇到了一些困难,因为LineChart最初是用FLEX 3编写的(而我的项目是FLEX 4)。它最终正确显示(提供了所有数据),但我不能在LineChart上单击任何内容而不收到错误。

我想指出的是,这不是一个重复的问题,因为在堆栈溢出这里上已经回答了类似的问题。我的问题非常相似,只是我的项目已经使用了我所能知道的"“命名空间,在前面的堆栈溢出回答中,它被称为”修复“。也许我没有正确地使用名称空间,在正确的位置?我不确定,如果必要的话,我可以发布更多的组件及其代码。我可能在这里说希腊语,也可能会混淆你们中的一些人,但我的弹性开发寿命只有6天,所以请原谅我的无知,因为这对我来说是一个全新的领域。

我能够掌握Axiis和Degrafa4的FLEX 4升级所需的Degrafa4文件,这要感谢一些非常好的家伙为这些工具开发开源项目。你可以找到那些文件这里

我目前收到错误:

ArgumentError:错误#2025年:提供的DisplayObject必须是调用方的子级。在flash.display::DisplayObjectContainer/getChildIndex() at mx.managers::SystemManager/getChildIndex()E:\dev\4.x\frameworks\projects\framework\src\mx\managers\SystemManager.as:1665 at mx.managers.systemClasses::ActiveWindowManager/mouseDownHandler()E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\systemClasses\ActiveWindowManager.as:471区块报价

此错误仅发生在我的第四个选项卡/VBOX上,它包含Axiis LineChart。一旦用户点击了图表,错误就会出现在所有UI组件上,无论我单击哪里。

如果您搜索错误消息,大多数人通过更改添加或删除UI对象的显式代码来解决它。这根本不是我的情况,在我的代码中没有可以更改的显式添加或删除。这使我相信这是一个名称空间/框架/库问题,或者从UI/Canvas/Namespace的角度来看,我的项目设计不正确。我对FLEX 4还不太熟悉,不知道在哪里使用Spark、MXML、MX名称空间(s、fx、mx)等等。

任何帮助或想法都是非常感谢的,因为这个bug是一个当前的节目停止。谢谢!

此外,我还得到通知,许多引用“

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-03 13:44:02

为什么"DeviceLineChart“是<mx:Application>?如果您没有对子应用程序执行任何花哨的加载,您可能需要将其改为<mx:Canvas>。如果您确实计划动态加载这些模块,那么您希望查看如何使用Module。您要告诉Flex的是,您的系统中有两个应用程序在运行,当您使用两个应用程序而不使用加载系统来运行时,会有一些像SystemManager这样的单例程序无法工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3392092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档