2011-04-13 48 views
2

开始 - 最好的说法是新的Flex/OOP。我一直试图添加一个基于StrokedElement的自定义类,以实现一个简单的网格(不像现有的Flex网格 - 这只是为了显示 - 不支持元素等...)Flex - 创建新的基本元素

我当前的课程外观像这样:

package ui.helpers 
{ 
    import flash.display.Graphics; 

    import spark.primitives.supportClasses.StrokedElement; 

    public class SGrid extends StrokedElement 
    { 
     public function SGrid() 
     { 
      super(); 
     } 

     private var _gridSize:Number; 
     [Inspectable(category="General", minValue="1.0")] 

     public function get gridSize():Number 
     { 
      return _gridSize; 
     } 

     public function set gridSize(value:Number):void 
     {   
      if (value != _gridSize) 
      { 
       _gridSize = value; 
       invalidateSize(); 
       invalidateDisplayList(); 
       invalidateParentSizeAndDisplayList(); 
      } 
     } 

     override protected function draw(g:Graphics):void { 

      for(var x:int; x < width; x+= _gridSize) { 
       g.moveTo(x,0); 
       g.lineTo(x,height); 
      } 
      for(var y:int; y < height; y+= _gridSize) { 
       g.moveTo(0,y); 
       g.lineTo(width,y); 
      } 

     } 

    } 
} 

这是从Flex spark.primatives.rect那儿剽窃 - 一切工作正常 - 但是当我把它添加到我的应用程序我希望做到这一点:

<helpers:SGrid id="gridOne" width="100" height="200" gridSize="10"> 
     <s:stroke> 
      <s:SolidColorStroke color="0xCCCCCC" alpha="0.8" /> 
     </s:stroke> 
    </helpers:SGrid> 

但在实际情况是这样的:

<helpers:SGrid id="gridOne" width="100" height="200" gridSize="10"> 
     <helpers:stroke> 
      <s:SolidColorStroke color="0xCCCCCC" alpha="0.8" /> 
     </helpers:stroke> 
    </helpers:SGrid> 

如果我使用s:stroke,那么我会得到错误。显然,我很高兴它的作品 - 但我想明白为什么这里的区别?

回答

2

这是关于类声明的命名空间。

SGrid是命名空间helpers:的一部分,而不是s:命名空间的一部分。

因此,在设置属性时,需要通过helpers:命名空间引用该属性。

属性本身在SGrid的基类上声明并不重要(在你的案例中,StrokedElement),它是SGrid实例的属性。

这是一样的:

var grid:SGrid = new SGrid(); 
grid.stroke = new SolidColourStroke(); 

即使行程在基类中声明,就引用它通过SGrid类。

+0

这很有道理!非常感谢您的快速回答。 – DrPumpkinhead 2011-04-14 15:30:47