2011-10-12 68 views
0

在智能感知自动完成停止工作的特定情况下,我遇到了Flash Builder 4的一致问题。Flash Builder 4自动完成功能停止使用多个脚本标记

这发生在我使用DataGroup中的内联组件时。 我有一个组件类的脚本标签,然后,在DataGroup中,我在itemRenderer下有一个Component标签,并且在该组件的类标签下有一个Script标签。此时intellisense停止工作。有没有人遇到过这种情况,并找到解决办法?

这是一个源代码示例。 将其加载到Flash Builder中,如果您遇到同样的问题,则自动完成功能在第一个脚本标记中不起作用。这很烦人,因为我喜欢使用内联组件。

<?xml version="1.0" encoding="utf-8"?> 
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300"> 
    <fx:Script> 
    <![CDATA[ 
     //Try to use auto-complete 
     //It doesn't work 
     var p:Object; 
    ]]> 
    </fx:Script> 
    <s:DataGroup> 
    <s:itemRenderer> 
     <fx:Component className="MyItemRenderer"> 
     <s:Group implements="mx.core.IDataRenderer"> 
      <fx:Script> 
      <![CDATA[ 
       //auto-complete is ok here... 
       private var _data:Object; 

       public function get data():Object { 
       return _data; 
       } 

       public function set data(value:Object):void { 
       _data = value; 
       invalidateProperties(); 
       } 
      ]]> 
      </fx:Script> 
     </s:Group> 
     </fx:Component> 
    </s:itemRenderer> 
    </s:DataGroup> 
</s:Group> 

回答

0

好的,这里是另一种解决方法,它可以让我保持项目渲染器代码在同一个mxml文件中,而且变化很小。我很偶然地发现它。您所做的不是将内嵌的项目渲染器的<fx:Component>标记定义为<s:itemRenderer>标记的子元素,而是将其移至<fx:Declarations>标记并为其指定一个类名称。然后,将该类名称放入<s:itemRenderer>标记中。这对我来说比对项目渲染器组件进行外部化稍微好一些。

这是一个最基本的例子:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     xmlns:mx="library://ns.adobe.com/flex/mx"> 
    <fx:Declarations> 
    <fx:Component className="PrintLine" id="printLineFactory"> 
     <s:Label implements="mx.core.IDataRenderer" width="100%"> 
     <fx:Script> 
      <![CDATA[ 
      private var _data:Object; 

      public function get data():Object { 
       return _data; 
      } 

      public function set data(value:Object):void { 
       _data = value; 
       invalidateProperties(); 
      } 

      override protected function commitProperties():void { 
       super.commitProperties(); 
       if (_data) { 
       text = String(_data); 
       } 
      } 
      ]]> 
     </fx:Script> 
     </s:Label> 
    </fx:Component> 
    </fx:Declarations> 
    <fx:Script> 
    <![CDATA[ 
     //auto-complete works here now! 
    ]]> 
    </fx:Script> 
    <s:layout> 
    <s:VerticalLayout /> 
    </s:layout> 
    <s:Scroller height="100"> 
    <s:viewport> 
     <s:DataGroup width="100%"> 
     <s:layout> 
      <s:VerticalLayout /> 
     </s:layout> 
     <s:itemRenderer> 
      PrintLine 
     </s:itemRenderer> 
     </s:DataGroup> 
    </s:viewport> 
    </s:Scroller> 
</s:Application> 

,我这样做是愚蠢还是我仍然讨厌的Adobe。 :-(

更新: 使用类名“打印行”只在上面的代码工作,因为根标签是一个应用程序标签在自定义子组件,您需要绑定到出厂基准来代替:

<s:itemRenderer>{printLineFactory}</s:itemRenderer> 
0

这是因为inline Item Renderer中实现了IDataRenderer。如果删除此项或创建项目渲染器组件,智能感知/自动完成应该按预期工作。

+0

感谢您对原因的澄清,但我想要一种使用内联组件*和*自动完成的方式,外联内联组件使它不再是内联组件,因此基本上没有解决方法。 Flash Builder失败。 – jpwrunyan