无法找到定义错误将CSS文件中的ClassReference编译为Swf文件

时间:2010-02-17 08:30:04

标签: flex flex4

我正在将我的css文件编译为swf文件并在运行时加载它们。在大多数情况下编译这些并使用ClassReference语句我没有问题:

.miniCashLadderGridStyle
{
    color : #2a2a2a;
    backgroundAlpha : 0;
    borderSkin : ClassReference("mx.skins.ProgrammaticSkin");
    headerSortSeparatorSkin : ClassReference("mx.skins.ProgrammaticSkin");
    horizontalSeparatorSkin : ClassReference("company.assets.GridHorzDivLine");
    verticalSeparatorSkin : ClassReference("company.assets.GridVertDivLine");
}

工作正常。资产来自一个单独的swc,但是这个:

header-background-skin : ClassReference("company.view.grid.skin.HeaderBackground");

不起作用。不同之处在于HeaderBackground是与css文件在同一项目中的一个类。如果我将样式移动到我的mxml文件中,那确实很好。

我想知道编译器在编译css fiels时是否使用不同的源路径。

这是在FlashBuilder 4 build 269271 SDK 13963

6 个答案:

答案 0 :(得分:2)

因为如果不在其他地方使用它,所引用的外观类尚未编译到应用程序中,因此在应用样式SWF时将发生运行时类未找到错误。通过避免此错误,您可以强制将皮肤类编译到应用程序中。例如:

<s:Application>
    import company.view.grid.skin.HeaderBackground;
    private var referrenceEnforcer:Array = [HeaderBackground];
</s:Application>

答案 1 :(得分:1)

问题在于,当您在Flex / Flash构建器中将css编译为swf时,它会在没有项目构建路径的情况下运行mxmlc,因此编译器无法看到源代码。 The old bug filed 2 years ago

解决方法是将所需的包放在css所在的同一文件夹中(即使符号链接就足够了)。编译器会看到文件&amp;适当地将它们编译成类。

答案 2 :(得分:0)

这可能有所帮助:

Flex支持外部CSS样式表。要将样式表应用于当前文档及其子文档,请使用标记的source属性。外部样式表文件应位于包含MXML源文件的文件夹中。默认情况下,这是MXML项目中的src文件夹。

注意:您应该尝试限制应用程序中使用的样式表数量,并仅在应用程序中的顶级文档(包含该标记的文档)中设置样式表。如果在子文档中设置样式表,则可能会出现意外结果。

以下示例在名为external.css的外部CSS文件中定义了两个CSS类选择器。通过在标记的source属性中指定其路径和文件名,可以在Flex应用程序中使用外部CSS文件。 例: 外部CSS文件

/* An external CSS file */
.solidBorder
{
    borderStyle: "solid";
}

.solidBorderPaddedVertically
{
    borderStyle: "solid";
    paddingTop: 12px;
    paddingBottom: 12px;
}

MXML文件

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    width="150" height="140" 
    viewSourceURL="src/StylesExternal/index.html"

>
    <mx:Style source="styles/external.css" />

    <mx:VBox styleName="solidBorder">

        <mx:Button label="Submit"/>
    </mx:VBox>

    <mx:VBox styleName="solidBorderPaddedVertically">
        <mx:Button label="Submit"/>
    </mx:VBox>

</mx:Application>

答案 3 :(得分:0)

编译CSS时,在编译器的library-path参数中提供模块的swf,他会看到该类。

答案 4 :(得分:0)

尝试右键单击FlashBuilder 4的Package Explorer中的CSS,然后将编译CSS转换为SWF。这似乎解决了我。

答案 5 :(得分:0)