错误#1009,导航器为空

时间:2014-05-05 08:25:36

标签: flex navigator

我在Flex中遇到了一些问题。基本上我想通过使用navigator.pushview从列表到自定义项目渲染器导航到其他页面。这是我的CustomItemRender.as。编辑:

package renderer
{
   import flash.events.MouseEvent;
   import mx.core.FlexGlobals;
   import mx.events.FlexEvent;
   import mx.events.ItemClickEvent;
   import spark.components.LabelItemRenderer;
   import spark.components.NavigatorContent;
   import spark.components.ViewNavigator;

public class CustomItemRender extends LabelItemRenderer
{
    protected var var_A:Image;

    [Bindable]
    public var navigator:ViewNavigator = new ViewNavigator();

    public function PrgListItemRenderer()
    {
        super();
    }

    override public function set data(value:Object):void
    {
        super.data = value;         
    }

    override protected function createChildren():void
    {
        super.createChildren();

        if(!takeAtt)
        {
            var_A= new Image();
            var_A.source = "data/pics/var_A.png";
            var_A.width = 23;
            var_A.height = 23;
            var_A.buttonMode = true;
            var_A.addEventListener(MouseEvent.CLICK, var_AItem);
            addChild(var_A);
        }
     }

override protected function measure():void
    {
        super.measure();
        // measure all the subcomponents here and set measuredWidth, measuredHeight, 
        // measuredMinWidth, and measuredMinHeight              
    }

    /**
     * @private
     * 
     * Override this method to change how the background is drawn for 
     * item renderer.  For performance reasons, do not call 
     * super.drawBackground() if you do not need to.
     */
    override protected function drawBackground(unscaledWidth:Number, 
                                               unscaledHeight:Number):void
    {
        super.drawBackground(unscaledWidth, unscaledHeight);
        // do any drawing for the background of the item renderer here  
        if(selected || showsCaret)
        {
            graphics.beginFill(0xffffff, 1);
            graphics.endFill();
        }
    }

public function var_AItem(event:MouseEvent):void
    {   
        trace("navigator: "+navigator);
        navigator.pushView(nextView); //this is the line that have error #1009
    }

    }
}

但是我得到了错误#1009。请帮帮我。感谢。

1 个答案:

答案 0 :(得分:1)

我认为听一下项目渲染器中的click事件是个坏主意。 您的基本设置应如下所示:

->ViewNavigatorApplication>

-->SomeCustomView

---> SomeListBasedComponent id="list" itemRenderer="someCustomRenderer"

在列表中填入一些数据,这些数据将由itemRenderer显示。

现在听听" IndexCangeEvent"列表(从您的视图)并处理'点击'有

在您的视图中添加:

private function init():void 
{ 
 list.addEventListener(IndexChangeEvent.CHANGE , onIndexChange );
}

protected function onIndexChange(e:IndexChangeEvent):void
{
 // find out which item was selected. You can use the selectedItem property for this
 var item:Object = list.selectedItem;
 // start the view;
 navigator.pushView(MyViewClass , item.someViewData );
}

您的视图将保留对ViewNavigator的引用。

P.S。别忘了调用视图的onCreationComplete()的init()函数。

在您的查看声明中添加:

View ... creationComplete="init()" >