【问题标题】:Could not resolve * to a component implementation无法将 * 解析为组件实现
【发布时间】:2010-06-30 19:25:23
【问题描述】:

我有点卡在这个问题上,希望你能提供一些帮助来帮助我。

我收到“无法将 * 解析为组件实现”。错误信息。然而,我通过谷歌读到的一切都对我的案子没有丝毫帮助。我想我只是遗漏了一些明显的东西,但也许是更严重的东西。

所以,为了解决这个问题,我尝试了两件事,并且都可以工作,只要他们带我。首先,我添加了一个完全相同的新组件,然后将出错组件的内容复制到其中。我用新组件替换了视图堆栈“页面”(据我所知,它是相同的,但名称不同),编译器错误消失了。

我也可以通过简单地重命名原始组件并让 FB4 为我重构来解决这个问题。错误再次消失。但是,如果我随后重命名回原来的名称,我会再次收到编译器错误。

我曾多次尝试清理项目,但都没有帮助。删除工作区和重新导入项目也不行。

我真的很想了解我在这里做错了什么。我错过了什么?

非常感谢!

【问题讨论】:

  • 你的组件叫什么名字?我以前见过这样奇怪的 Flex 名称冲突。
  • 无法将 解析为组件实现。只需将其更改为 (额外的下划线),错误就会消失。

标签: apache-flex


【解决方案1】:

尝试以下方法:

  • 右键单击您的项目 包资源管理器。
  • 在弹出窗口中选择“属性” 菜单(最后一项)。
  • 点击“Flex 库构建路径”
  • 点击“类”标签

尝试在其中找到新组件的名称。如果你这样做,看看它是否被选中。如果不是,请检查它。这应该可以解决问题,但您可能需要清理并(有时)退出 FB4 并重新启动。

【讨论】:

  • 恐怕我没看到。在 flashbuilder 4 中,我进入“属性”...之后我们的路径出现分歧,没有“Flex 库构建路径”但是我确实有一个“Flex 构建路径”,但点击它不会出现“类”标签,然后快速浏览找到一个,我找不到它。
  • 在小搜索对话框中搜索“类”也没有任何结果。
  • 原海报指的是一个 Flex 库项目。该对话框旨在让您指定应将哪个文件编译到 SWC 中。弹性项目不会有“班级列表”;就像在创建 SWF 时你想把所有文件都放在那里一样。
【解决方案2】:

通常这样的错误意味着您有两个名称相似的组件,而编译器无法判断您要使用哪一个。

您是否有其他相同的组件,即使在不同的包中?或者您的组件中是否有与组件同名的变量?请务必检查您的 SWC 和/或库项目。

我假设这是一个编译时错误;那是对的吗?

【讨论】:

  • 是的,它是一个编译时错误。据我所知,没有其他具有该名称的组件。命名空间是相当新的(就像整个项目一样)。嗯..等等,这让我想到了一些事情。从 OrderEntryView_2_Cart.mxml 中删除所有脚本并将其放入文件 OrderEntryView_2_Cart.as 后,我首先收到此错误,然后将其导入 mxml 文件。我还没有尝试过的一件事是更改该文件的名称。我没想过要更改那个文件,因为它只是一个 AS 文件......不是一个类或任何东西。我从来没有想过它可能会发生冲突
  • 好吧,我会……这就是问题所在。我重命名了 actionscript 文件,重新链接,然后 Voile!我可以走了!感谢您提出一个为我指明正确方向的问题!
  • 然而,我不明白的是,为什么编译器会拾取 ActionScript“文件”并将其视为组件?那里没有类声明。
  • 我不知道,但如果我必须推理,路径/文件名必须与包/类名相同是有原因的。两个文件名相同可能会混淆“预文件解析”查找。
【解决方案3】:

在我的情况下,通过将 Flex CompilerSDK 版本 更改为 4.5

解决了问题

您可以尝试使用不同的 SDK 版本,直到您可以编译您的组件或直到错误更改为与主题相关的错误相关的内容。

更改此内容后,我收到与当前主题不支持的属性相关的错误,因此我在 设计视图属性视图 中打开组件选择外观标签并将主题从 SPARK 更改为 HALO

希望这对其他人有用

【讨论】:

    【解决方案4】:

    此错误的一个原因是组件的默认 xml 命名空间与组件所在的包不同。

    检查以确保组件定义中的默认xmlns条目与包相同。

    例如:

    如果您有一个组件 MyControl.mxml 位于包 com.company.components.controls

    mxml 开始标签可能如下所示:

    <MyControl xmlns:mx="http://www.adobe.com/2006/mxml"
               xmlns:util="com.company.components.util.*"
               xmlns:components="com.company.components.*"
               xmlns="com.company.components.controls.*">
    

    注意默认的 xmlns 入口是如何指向同一个包的。


    为什么会这样:

    经常发生的情况是,通过将 MXML 类移动到新包来重构 MXML 类后,您最终会得到一个有效但不正确的 mxml 定义。

    例如,假设我重构并将 MyControl.mxmlcom.company.components 包移动到 com.company.components.controls强>包。 xmlns 定义不会更新,因此它们看起来像这样:

    <controls:MyControl xmlns:mx="http://www.adobe.com/2006/mxml"
                        xmlns:util="com.company.components.util.*"
                        xmlns="com.company.components.*"
                        xmlns:controls="com.company.components.controls.*">
    

    注意默认命名空间仍然指向 com.company.components 包,并且 mxml 标签 MyControl 必须以命名空间 controls 这表明存在问题。

    现在问题来了;这在技术上是有效的,并且通常会起作用。原因是它是有效的,并且组件都可以在它们定义的 xmlns 位置中找到。

    当您尝试使用框架或父组件预期在默认命名空间中找到的组件时,就会出现问题。一个很好的例子是 以及您可能要扩展的父 mxml 组件的其他子组件。

    要解决此问题,您应该修改 mxml 标记和命名空间,以便默认命名空间与当前包相同。 (和第一个例子一样)

    【讨论】:

      【解决方案5】:

      可能我回答这个问题很晚,但这可能是因为与您的课程相关联的包名称不准确也不合适。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-16
        • 2015-01-16
        • 2013-01-30
        相关资源
        最近更新 更多