2012-02-11 1 views
0

Я пытаюсь использовать компонент DataGrid ActionScript из файла mxml. Но это покажет мне некоторую ошибку.Пакеты не могут быть вложены - as3

Следующий мой основной файл приложения.

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:local="*" xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"> 



    <mx:Metadata> 
     [Event(name="myEvent", type="flash.events.Event")] 
    </mx:Metadata> 


    <mx:Button label="Button"/> 
    <mx:Array id="arr"> 
      <mx:Object From="Phill" Subject="GMC-1 Release" Date="12/08/06" CC="Jim" Profit="69" /> 
      <mx:Object From="Harry" Subject="GMC-1 Release" Date="12/08/06 11111111" CC="Ram" Profit="10" /> 
      <mx:Object From="Barb" Subject="GMC-1 Release" Date="12/08/06" CC="Anant" Profit="20" /> 
      <mx:Object From="Amit" Subject="GMC-1 Release" Date="12/07/06" CC="Jim" Profit="28" /> 
      <mx:Object From="Sam" Subject="GMC-1 Release" Date="12/08/06" CC="Jim" Profit="17" /> 
      <mx:Object From="Phill" Subject="GMC-2 Release" Date="12/11/06" CC="Jim" Profit="10" /> 
      <mx:Object From="John" Subject="Grid scrolling" Date="12/10/06" CC="Craig" Profit="20" /> 
      <mx:Object From="Bob" Subject="ItemRenderers" Date="12/10/06" CC="Moxie" Profit="11" />    
</mx:Array> 

<local:AutoResizableADG id="adg" dataProvider="{arr}" width="400" height="400" > 
    <local:columns> 
     <mx:AdvancedDataGridColumn headerText="From" dataField="From" width="50" /> 
     <mx:AdvancedDataGridColumn headerText="Subject" dataField="Subject" width="50" /> 
     <mx:AdvancedDataGridColumn headerText="Date" dataField="Date" width="70" /> 
     <mx:AdvancedDataGridColumn headerText="CC" dataField="CC" /> 
    </local:columns> 

</local:AutoResizableADG> 

</mx:Application> 

и файл AutoResizableADG.as в одном пакете .. то есть SRC/(по умолчанию-пакет)

// ActionScript file 

package  // Line where it is showing error. 
{ 

    import flash.display.DisplayObject; 
    import flash.events.MouseEvent; 
    import flash.text.TextLineMetrics; 

    import mx.controls.AdvancedDataGrid; 
    import mx.controls.Alert; 
    import mx.controls.listClasses.IDropInListItemRenderer; 
    import mx.core.IUIComponent; 
    import mx.core.UIComponent; 

    public class AutoResizableADG extends AdvancedDataGrid 
    { 
     var sepArray:Array = new Array(); 
     public function AutoResizableADG() 
     { 
      // call super 
      super(); 
     } 

     /** 
     * Returns the header separators between column headers, 
     * and populates the <code>separators</code> Array with the separators returned. 
     * 
     * @param i The number of separators to return. 
     * 
     * @param seperators Array to be populated with the header objects. 
     * 
     * @param headerLines The parent component of the header separators. 
     * Flex calls the <code>headerLines.getChild()</code> method internally to return the separators. 
     */ 
     override protected function getSeparator(i:int, seperators:Array, headerLines:UIComponent):UIComponent 
     { 

      var sep:UIComponent = super.getSeparator(i, seperators, headerLines); 
      sep.doubleClickEnabled = true; 
      // Add listener for Double Click 
      DisplayObject(sep).addEventListener(myEvent.myEvent, hello); 
      //   Alert.show(""+sep); 
      sepArray.push(sep); 
      return sep; 
     } 

     public function getListItems():Array{ 
      return listItems; 
     } 

     /** 
     * @private 
     * Indicates where the right side of a resized column appears. 
     */ 
     public function hello(event:UIComponent):void 
     { 
      // check if the ADG is enabled and the columns are resizable 
      if (!enabled || !resizableColumns) 
       return; 

      var target:DisplayObject = DisplayObject(event); 
      var index:int = target.parent.getChildIndex(target); 
      // get the columns array 
      var optimumColumns:Array = getOptimumColumns(); 

      // check for resizable column 
      if (!optimumColumns[index].resizable) 
       return; 

      // calculate the maxWidth - we can optimize this calculation 
      if(listItems) 
      { 
       var len:int = listItems.length; 
       var maxWidth:int = 0; 
       for(var i:int=0;i<len;i++) 
       { 
        if(listItems[i][index] is IDropInListItemRenderer) 
        { 
         var lineMetrics:TextLineMetrics = measureText(IDropInListItemRenderer(listItems[i][index]).listData.label); 
         if(lineMetrics.width > maxWidth) 
          maxWidth = lineMetrics.width ; 
        } 
       } 
      } 

      // set the column's width 
      optimumColumns[index].width = maxWidth + getStyle("paddingLeft") + getStyle("paddingRight") + 8; 
     } 
    } 
} 

Он показывает мне ошибку в файле ActionScript ....

"Packages cannot be nested" 

Почему это происходит? В чем проблема ?

+0

Ваш код кажется правильным - я скопировал и вставил его в мой редактор, и не было показано «Пакеты не могут быть вложенными». Может ли это быть связано с вашей структурой папок (no-name package всегда является главной папкой источника)? А как насчет суперкласса? Какую IDE вы используете? Если вы работаете в Flash Builder или FDT, попробуйте «Project -> Clean». – weltraumpirat

+0

Я только что создал новый проект, используя только ваш код. Я получил ошибку компиляции для класса AutoResizableADG, заявив, что «myEvent» является неопределенным свойством, это ваша проблема? Единственный код, который у меня есть, - это ваш класс и код приложения выше, все в пакете по умолчанию. – Jeremy

ответ

0

Я не уверен, почему он не компилируется, но вы пытались помещать AutoResizableADG.as в фактический пакет, чтобы узнать, исправляет ли он проблему?

E.g.

// ActionScript file 

package myPackage 
{ 
import flash.display.DisplayObject; 
import flash.events.MouseEvent; 
import flash.text.TextLineMetrics; 

import mx.controls.AdvancedDataGrid; 
import mx.controls.Alert; 
import mx.controls.listClasses.IDropInListItemRenderer; 
import mx.core.IUIComponent; 
import mx.core.UIComponent; 

public class AutoResizableADG extends AdvancedDataGrid 
{ 
    .... 
0

Это поведение, которое я называю причудливым, но документированным. Я нашел два исправления:

  1. weltraumpirat правильный. попробуйте очистить свой код.
  2. Если вы находитесь в flashdevelop, вы можете удалить ссылку myPackge, снова проверить проект, и когда он произнес следующую ошибку, отмените изменение и оно примет его.

Оба метода работают по тому же принципу.
удачи!