手风琴菜单错误1010

时间:2009-11-21 06:56:59

标签: actionscript-3 navigation flash-cs4 accordion

我正在尝试通过在线教程创建手风琴菜单。我按照Original Tutorial的每一步(我认为),但根据我的大小改变了一些事情,并使实例名称以_mc或_txt结尾。但由于某种原因,它似乎没有起作用。


我收到了#1010错误,并没有真正澄清任何内容:

  

TypeError:错误#1010:术语是   未定义且没有属性。
    在   教程_的FLA :: MainTimeline / placeItemsOnStage()
    在   教程_的FLA :: MainTimeline /的onComplete()
    在   flash.events::EventDispatcher/dispatchEventFunction()
    在   flash.events::EventDispatcher/dispatchEvent()
    在flash.net::URLLoader/onComplete()


我的第一个xml文件包含要插入的所有图像,而且根本没有更改的图像应该可以正常工作。

我知道这很长,但我希望无论如何都有人可以查看。我对此非常陌生,几乎不得不放弃整个项目。非常感谢!

我的代码:

//import tweenlite classes
import gs.TweenLite;
import gs.easing.*;

var MENU_ARRAY:Array; //used to save the items data
var OPENED_MENU:int; //to inform the menu that should be open at startup
var MOVE_ON_MOUSE_OVER:Boolean=false; //tha name says everything
var xmlLoader:URLLoader; //the xml loader

loadXML("menu2.xml"); //load the xml

function loadXML(Uri:String):void {
   xmlLoader = new URLLoader();
   xmlLoader.addEventListener(Event.COMPLETE, onComplete);
   xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError);
   xmlLoader.load(new URLRequest(Uri));
}

function onError(evt:ErrorEvent):void {
   trace("cannot load xml file");
}

function onComplete(evt:Event):void {
   //read and load xml into array, by parsing it using prepareMenu
   MENU_ARRAY=prepareMenu(xmlLoader.data.toString());
   placeItemsOnStage(); //place all required items on stage.
}

function placeItemsOnStage():void {
var pos:Number=0;
    //define the container properties
    menuContainer_mc.x=0;
    menuContainer_mc.y=0;

for(var c:int=0; c<MENU_ARRAY.length; c++) {
  var it:menuItem = new menuItem; //load out menuItem, because its exported to AS, we can use it here
    it.x=c*51; //its the gray border width
    it.y=0; //place on top
    it.id="Item-"+c; //id the menuItem
    it.name="Item-"+c; //name de menuItem
    it.posX=pos; //actual pos, useful to open and know is position
    it.itemLabel_txt.text=String(MENU_ARRAY[c].Ititle).toUpperCase(); //load the label in uppercase
    it.addEventListener(MouseEvent.CLICK, onMouseClick); //add mouse click listener
    if(MOVE_ON_MOUSE_OVER==true) it.addEventListener(MouseEvent.MOUSE_OVER, onMouseOver); //if configured, load the mouse over event
    it.useHandCursor=true;  //use hand cursor
    it.buttonMode=true; //buttonMode
    it.itemText_txt.visible=false; //hide the textField
    menuContainer_mc.addChild(it); //add the menu item as child

     if(String(MENU_ARRAY[c].IcontentType)=="image/swf")    { //check the content and load things accordint to it
        var ldr:Loader = new Loader();
        ldr.x=51;
        ldr.y=0;
        it.addChild(ldr);
        ldr.load(new URLRequest(MENU_ARRAY[c].IcontentData.toString()));
    }
    else if(String(MENU_ARRAY[c].IcontentType)=="text") {
        it.itemText_txt.visible=true;
        it.itemText_txt.text=MENU_ARRAY[c].IcontentData.toString();
    }
pos+=51; //the next menuItem x position
}

//put mask in place
masker_mc.width=(MENU_ARRAY.length*51+700)
masker_mc.height=menuContainer_mc.height;
masker_mc.x=0;
masker_mc.y=0;

moveItem(OPENED_MENU-1); //open menu confirured in XML

}

function onMouseOver(evt:MouseEvent):void {
if(evt.target.name.toString()=="buttonBack") prepareMove(evt)
}

function prepareMove(evt:MouseEvent):void {
   var targetName:String = evt.currentTarget.name.toString(); //get the menuItem
   var temp:Array = targetName.split("-"); //split his name: Item-x
   var itemNumber:int=(temp[1]); //got item number
   moveItem(itemNumber); //move it
 }

function onMouseClick(evt:MouseEvent):void {
   if(evt.target.name.toString()=="buttonBack")  prepareMove(evt); //mouse action was done in buttonBack
   else trace("Item "+evt.currentTarget.name+" clicked!"); //mouse action was made on accordion area
 }

 function moveItem(num:int):void {
   var itemToMove:menuItem=menuContainer_mc.getChildByName("Item-"+String(num)) as menuItem;
   //get the menuItem child
  for(var m=0;m<MENU_ARRAY.length;m++) //move one-by-one to the new position
  {
     var tempMc = menuContainer_mc.getChildByName("Item-"+m);
     if(tempMc.x > itemToMove.x) TweenLite.to(tempMc, 1, {x:((tempMc.posX) + itemToMove.width-51), ease:Quart.easeOut}); //see tweenLite for info about this.
     else if(tempMc.x <= itemToMove.x) TweenLite.to(tempMc, 1, {x:(tempMc.posX), ease:Quart.easeOut});
   }
 }

 function prepareMenu (XMLData:String):Array
   {
  //make sure it cames in XML
  var menuXML:XML = new XML(XMLData);
  //just in case
  menuXML.ignoreWhitespace = true;

  //get XML item's entrys
 var XMLItems = menuXML.descendants("item");

  //load all items into an array
  var itemsArray:Array = new Array();
  var itemObj:Object;
  for(var i in XMLItems)
  {
    itemObj=new Object();
    itemObj.Ititle=XMLItems[i].@Ititle;
    itemObj.IcontentType=XMLItems[i].@IcontentType;
    itemObj.IcontentData=XMLItems[i].@IcontentData;
    itemObj.itemID="menu"+i;
    itemsArray.push(itemObj);
  }
  OPENED_MENU=menuXML.@menuOpen; //get menu for open.
  MOVE_ON_MOUSE_OVER=(menuXML.@moveOnMouseOver.toString()=="true" ? true : false); //get the option for load or not mouseOver open
  return itemsArray;
}

//finish.
stop();

1 个答案:

答案 0 :(得分:0)

“term”是指标识符,“错误#1010:术语未定义且没有属性”表示您正在使用无法计算的表达式。当您尝试通过其myobject["property"].method()中的字符串名称访问和使用未定义的对象属性时,通常会发生这种情况。你能提供引发例外的确切行吗?

相关问题