在智能感知自动完成停止工作的非常特殊的情况下,我遇到了Flash Builder 4的一致问题。
当我在DataGroup中使用内联组件时会发生这种情况。 我有一个组件类的Script标签,然后,在DataGroup中,我在itemRenderer下面有一个Component标签,在该组件的class标签下有一个Script标签。此时智能感知停止工作。有没有人遇到这个并找到了解决办法?
这是一个源代码示例。 在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 :(得分:0)
这是因为内联项呈示器中的实现IDataRenderer。如果删除此项或创建项呈示器组件,则intellisense / autocomplete应按预期工作。
答案 1 :(得分: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。 : - (
更新: 使用类名“PrintLine”仅适用于上述代码,因为根标签是Application标签。在自定义子组件中,您需要绑定到工厂引用:
<s:itemRenderer>{printLineFactory}</s:itemRenderer>