Apache flex 为什么mx:states在解决组件实现问题时遇到困难?
当我在MXML文件中设置状态时,偶尔会出现一个错误。我得到的错误是mx:states无法解析为组件实现 我在下面的url上读到,这个问题是由扩展组件引起的——它以某种方式破坏了编译器解析mx:states的能力。我不明白为什么会这样,但我自己没有任何答案。我也不一定能使这种方法适用于我所有的扩展组件 我提出的解决方法是不使用任何名称空间。 因此,我的代码如下所示:Apache flex 为什么mx:states在解决组件实现问题时遇到困难?,apache-flex,state,transition,Apache Flex,State,Transition,当我在MXML文件中设置状态时,偶尔会出现一个错误。我得到的错误是mx:states无法解析为组件实现 我在下面的url上读到,这个问题是由扩展组件引起的——它以某种方式破坏了编译器解析mx:states的能力。我不明白为什么会这样,但我自己没有任何答案。我也不一定能使这种方法适用于我所有的扩展组件 我提出的解决方法是不使用任何名称空间。 因此,我的代码如下所示: <states>...</states> 。。。 而不是: <mx:states>...&
<states>...</states>
。。。
而不是:
<mx:states>...</mx:states>
。。。
让这个陌生人(至少对我来说)是因为标签的孩子们没有这个问题。无法解析mx:states,但其子项mx:State可以解析。mx:State的子级mx:SetProperty也被解析
有谁能解释这一点,和/或提供比我提出的更好的解决方案
顺便说一句,我在mx中看到了同样的问题:转换。如果您有一个自定义组件,那么它可能位于mx以外的命名空间中。删除名称空间是正确的,但不必这样做。考虑下面的例子
<example:MyComponent xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:example="com.example.*">
</example:MyComponent>
在该代码中,com.example包中有一个名为MyComponent的自定义组件。现在,我们如何添加自定义状态?很简单
<example:MyComponent xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:example="com.example.*">
<example:states>
<mx:State name="CustomState">
</mx:State>
</example:states>
</example:MyComponent>
组件的属性(如状态、转换,甚至按钮上的标签)可以创建为子元素。这些属性必须使用与组件实例相同的命名空间。属性在继承链中来自何处并不重要。即使com.example.MyComponent扩展了mx.containers.Canvas,states属性也将使用定义MyComponent的XML命名空间
简而言之,不要将states属性视为mx:states,因为属性的mx:prefix只是从组件继承的。但是,我们必须使用mx:当我们定义实际状态本身时,因为这是一个类(不是属性),而该类是在mx名称空间中定义的
为了进一步解释,可以将名称空间更改为mx以外的名称空间
在该示例中,我们将mx更改为zzz。现在,states属性的前缀必须是zzz:,而不是mx:。
为什么会失败?我还发现,当我定义了多个名称空间时,这会失败。删除
Josh,谢谢回复。您能否进一步解释为什么mx在扩展实现该命名空间的组件的组件中不是有效的命名空间?为什么这不是mx:Button的问题?事实上,我不是说“为什么mx不是有效的名称空间”——我的意思是,为什么“mx:states不可解析”。谢谢你的进一步澄清,Josh。很抱歉接受了这么久。回复很好-StackOverflow宕机了,所以我必须自己解决这个问题,我也解决了,但这正是我遇到的问题,文档中没有涉及到这一点。。
<zzz:VBox xmlns:zzz="http://www.adobe.com/2006/mxml">
<zzz:states>
</zzz:states>
</zzz:VBox>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%"
height="100%"
backgroundColor="#f7f7f7"
xmlns:common="com.americanexpress.voice.view.component.common.*">
<mx:states name="edit">