代码之家  ›  专栏  ›  技术社区  ›  Ross Henderson

为什么mx:states在解析为组件实现时遇到困难?

  •  4
  • Ross Henderson  · 技术社区  · 16 年前

    在MXML文件中设置状态时,我偶尔会遇到错误。我得到的错误是mx:states无法解析为组件实现。

    我在以下网址上看到,这个问题是由扩展组件引起的,这在某种程度上破坏了编译器解析mx:states的能力。我不明白为什么会这样,但我没有自己的答案。我也不一定能让这种方法适用于我的所有扩展组件。

    http://life.neophi.com/danielr/2007/01/could_not_resolve_to_a_compone.html

    我提出的解决方法是不使用任何命名空间。 所以,我的代码看起来像这样:

    <states>...</states>
    

    而不是:

    <mx:states>...</mx:states>
    

    让这个陌生人(至少对我来说)的事实是,标签的孩子们没有这个问题。mx:states无法解析,但其子mx:State可以解析。mx:State的子级mx:Setuproperty也被解析。

    有人能解释一下,和/或提供比我提出的更好的解决方案吗?

    顺便说一句,我在mx:transitions中看到了同样的问题。

    2 回复  |  直到 16 年前
        1
  •  17
  •   Josh Tynjala Ivan Chernykh    16 年前

    如果你有一个自定义组件,你可能会把它放在一个命名空间中,而不是 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命名空间。

    总之,不要想 状态 财产作为 mx:状态 因为 mx: 属性的前缀仅从组件继承。然而,我们确实必须使用 mx: 当我们定义实际状态本身时,因为这是一个类(而不是属性),并且该类是在mx名称空间中定义的。

    要进一步解释,您可以更改 http://www.adobe.com/2006/mxml 命名空间不是 mx .

    <zzz:VBox xmlns:zzz="http://www.adobe.com/2006/mxml">
        <zzz:states>
        </zzz:states>
    </zzz:VBox>
    

    在这个例子中,我们改变 mx 呼噜 现在 状态 属性必须前缀为 zzz: 而不是 mx: .

        2
  •  1
  •   sth    15 年前
    <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">
    

    为什么会失败?我还发现,当我定义了多个名称空间时,这会失败。删除 <mx: 解决了这个问题。

    推荐文章