Flex - 创建新的基元

时间:2011-04-13 12:54:22

标签: flex primitive flex-spark

开始 - 最好说一般来说我是Flex / OOP的新手。我一直在尝试添加一个基于StrokedElement的自定义类,以实现一个简单的网格(不像现有的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,那么我会收到错误。显然我很高兴它有效 - 但我想知道为什么这里有区别?

1 个答案:

答案 0 :(得分:2)

与声明的类名称空间有关。

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

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

属性本身是在SGrid的基类(在您的情况下为StrokedElement)中声明并不重要,它是SGrid实例的属性。

它与:

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

即使在基类上声明了stroke,也可以通过SGrid类引用它。