Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex/ActionScript3-对象属性/变量null_Apache Flex_Actionscript 3_Object_Null_Components - Fatal编程技术网

Apache flex Flex/ActionScript3-对象属性/变量null

Apache flex Flex/ActionScript3-对象属性/变量null,apache-flex,actionscript-3,object,null,components,Apache Flex,Actionscript 3,Object,Null,Components,如果我在FlashBuilder中执行下面的代码,我会得到以下错误(我翻译它) NumDisplay.mxml中的这一行是问题所在: [Bindable] public var oneled_top:OneDisplay = new OneDisplay(numberData.led_top); 如果我将其从上面更改为: [Bindable] public var oneled_top:OneDisplay = new OneDisplay(1); 它正在工作,因为我发送了一个真实的数字。

如果我在FlashBuilder中执行下面的代码,我会得到以下错误(我翻译它)

NumDisplay.mxml中的这一行是问题所在:

[Bindable]
public var oneled_top:OneDisplay = new OneDisplay(numberData.led_top);
如果我将其从上面更改为:

[Bindable]
public var oneled_top:OneDisplay = new OneDisplay(1);
它正在工作,因为我发送了一个真实的数字。 那么,如何从numberData.led\u top访问值呢

如果我用行测试samefileNumDisplay.mxml中的访问

<s:Label text="{numberData.led_top}" color="#FF0000">
</s:Label>
我的NumDisplay.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="600" minHeight="500" xmlns:components="components.*">
 <fx:Script>
            <![CDATA[
   import components.NumberDisplay;
   [Bindable]
   protected var firstNumber:NumberDisplay = new NumberDisplay(1);
   [Bindable]
   protected var secondNumber:NumberDisplay = new NumberDisplay(2);
             ]]>
 </fx:Script>

 <components:NumDisplay
  numberData="{firstNumber}"
  x="10" 
  y="20"/>

 <components:NumDisplay 
  numberData="{secondNumber}"
  x="73" 
  y="20"/>

</s:Application>
package components
{
 import flash.display.DisplayObject;

 [Bindable]
 public class NumberDisplay
 {
  public var num:Number;

  public var led_top:Number=0;
  public var led_r1:Number=0;
  public var led_r2:Number=0;
  public var led_middle:Number=0;
  public var led_l1:Number=0;
  public var led_l2:Number=0;
  public var led_bottom:Number=0;

  public function NumberDisplay(num:Number)
  {
   this.num = num;
   switch(this.num)
   {
    case 0:
     trace("ZERo");
     break;
    case 1:
     led_top = 1;
     led_r1 = 1;
     led_r2 = 1
     trace("EINS" + led_top + " num:" + num);
     break;
                            //[... some more cases]
    default:
     break;
   }
  }
 }
}
<?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="45" height="59"
   xmlns:components="components.*">

 <fx:Style>
  @namespace s "library://ns.adobe.com/flex/spark";
  @namespace mx "library://ns.adobe.com/flex/mx";
  @namespace components "components.*";
 </fx:Style>

 <fx:Script>
  <![CDATA[
   import components.NumberDisplay;
   import components.OneDisplay;

   [Bindable]
   public var numberData:NumberDisplay;

   [Bindable]
   public var oneled_top:OneDisplay = new OneDisplay(numberData.led_top);
                        // some more init calls of data-objects same type
  ]]>
 </fx:Script>


 <s:Label text="{numberData.led_top}" color="#FF0000">
 </s:Label>

 <components:oneLedDisplay showData="{oneled_top}" x="10" y="10" />
        // some more objects of same type
</s:Group>
MyoneLedDisplay.mxml

package components
{
 import flash.display.DisplayObject;

 public class OneDisplay
 {
  [Bindable]
  public var show:Number;
  [Bindable]
  public var value:Number=0;

  public function OneDisplay(show:Number)
  {
   this.show = show;
   switch(this.show) 
   {
    case 0:
     value = 0.3;
     trace(value);
     break;
    case 1:
     value = 1.0;
     trace(value);
     break;
   }
  }
 }
}
<?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">
 <fx:Script>
  <![CDATA[
   import components.OneDisplay;
   [Bindable]
   public var showData:OneDisplay;
  ]]>
 </fx:Script>

 <s:Rect id="stroke" width="40" height="6" alpha="{showData.value}">
  <s:fill>
   <s:SolidColor color="#000000"/>
  </s:fill>
 </s:Rect>

 <s:Label text="{showData.value}" color="#FF0000">
 </s:Label>

</s:Group>


请记住,您不仅要赋值,还要声明成员变量
oneled\u top
。此时,您无法访问
numberData
,因为它尚未实例化(没有调用
newnumberdata()
!您必须找到一种方法来调用
newonedisplay(numberData.led\u top)
以后,当实际有一个值要访问时。

请记住,您不仅要赋值,而且要声明成员变量
oneled\u top
。此时,您无法访问
numberData
,因为它尚未实例化(没有调用
new numberData()
!您必须找到一种方法,以便在以后实际有值可访问时调用新的OneDisplay(numberData.led\u top)。

您提供了许多我不想反向工程的代码

答案是oneled_top在numberData之前被初始化。使用MXML时,您无法控制变量的初始化

在commitProperties()方法中设置默认值,或者如果oneled_Top应该是蒙皮零件,则在PartAdded方法中设置默认值


您将从阅读中受益。

您提供了许多我不想反向工程的代码

答案是oneled_top在numberData之前被初始化。使用MXML时,您无法控制变量的初始化

在commitProperties()方法中设置默认值,或者如果oneled_Top应该是蒙皮零件,则在PartAdded方法中设置默认值


您将从阅读中受益。

您可以使用
BindingUtils.bindSetter()
检测对
numberData
的更改,然后初始化
oneled\u top

BindingUtils.bindSetter(_setOneLabel_top, this, "numberData");
和塞特:

function _setOneLabel_top(disp:NumberDisplay):void
{
  /* if(this.oneled_top == null) */
  this.oneled_top = new OneDisplay(disp.led_top);
}

但我认为,您在不需要的地方使用了
[Bindable]

您可以使用
BindingUtils.bindSetter()
来检测对
numberData
的更改,然后初始化
oneled\u top

BindingUtils.bindSetter(_setOneLabel_top, this, "numberData");
和塞特:

function _setOneLabel_top(disp:NumberDisplay):void
{
  /* if(this.oneled_top == null) */
  this.oneled_top = new OneDisplay(disp.led_top);
}

但我认为,您在不需要的地方使用了
[Bindable]

+1为这个问题提供了一个可靠的解释。就未来有价值可访问的时间而言,我建议使用commitProperties()(正如我在回答中所做的那样).+1对该问题进行了可靠的解释。就未来有值可访问的时间而言,我建议使用commitProperties()(正如我在回答中所做的那样)。