14

我正在构建一个包含多个模块的大型 Flex 项目(一个生成多个 SWF 的单个 Flex 项目)

现在,我有一个 css 文件,加载到主 SWF 标记中:

<s:Application ... >
    <fx:Style source="css/main.css" />
...
</s:Application>

在 CSS 文件中:

/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";

s|Panel { 
    skinClass: ClassReference("com.skins.DefaultPanelSkin"); 
} 

s|Button {
    skinClass: ClassReference("com.skins.DefaultButtonSkin");
}

CSS 文件在其他任何地方都没有被引用。

我目前有 6 个模块(加上主要的 SWF,总共 7 个 SWF)。我注意到警告的数量与模块的数量相关......每次我添加一个模块时,我都会收到更多的警告。现在,对于 CSS 文件中的每个条目,我都会收到 6 个警告,因此:

CSS type selectors are not supported in components: 'Panel'
CSS type selectors are not supported in components: 'Panel'
CSS type selectors are not supported in components: 'Panel'
CSS type selectors are not supported in components: 'Panel'
CSS type selectors are not supported in components: 'Panel'
CSS type selectors are not supported in components: 'Panel'

并重复 Button、TextArea 等。我有很多无用的警告,无法查看是否有任何有效的警告。

这个警告是由我做错了什么引起的吗?样式都被正确应用,并且看起来就像我在运行时想要的那样工作。如果我没有做错任何事,我可以告诉编译器忽略这个警告吗?

注意:我已经尝试过-show-unused-type-selector-warnings=false编译器标志,但它不起作用......这是一个类似但不同的警告。

4

7 回答 7

6

如果您正在查看 FlexBuilder 中的警告,您应该能够使用 Eclipse 的问题过滤 GUI。假设 Flex 4 在这方面与 Flex 3 非常相似,在右上角的问题标签上,有一个带有工具提示的按钮“配置要应用于此视图的过滤器”。这是带箭头的那个。

在过滤器对话框中,在默认过滤器上,将描述设置为“不包含”,并将其下的文本设置为“组件不支持 CSS 类型选择器”。

于 2009-11-13T13:02:21.330 回答
2

所以我最终只是将源代码下载到编译器,搜索它以找到该警告,将其注释掉,然后重新编译编译器。这与标记为 gumbo beta2 的版本背道而驰。

Index: modules/compiler/src/java/flex2/compiler/css/StylesContainer.java
===================================================================
--- modules/compiler/src/java/flex2/compiler/css/StylesContainer.java   (revision 10941)
+++ modules/compiler/src/java/flex2/compiler/css/StylesContainer.java   (working copy)
@@ -198,11 +198,11 @@
         {
             // [preilly] This restriction should be removed once the
             // app model supports encapsulation of CSS styles.
-            ComponentTypeSelectorsNotSupported componentTypeSelectorsNotSupported =
+            /*ComponentTypeSelectorsNotSupported componentTypeSelectorsNotSupported =
                 new ComponentTypeSelectorsNotSupported(getSource().getName(),
                                                        lineNumber,
                                                        selector);
-            ThreadLocalToolkit.log(componentTypeSelectorsNotSupported);
+            ThreadLocalToolkit.log(componentTypeSelectorsNotSupported);*/
             return true;
         }

不是最优雅的解决方案......但这些警告真的很烦人。

于 2009-10-10T00:31:02.577 回答
2

我发现此警告的另一个原因是在您从类中引用 parentApplication 的情况下。

我的项目有 2 个应用程序,在某些情况下,我出于某种原因需要访问其中一个或另一个应用程序。

如果我按如下方式引用我的 parentApplication,我会看到警告:

(this.parentApplication as SomeAppName).someFunction();

如果我离开参考一般,错误就会消失:

this.parentApplication.someFunction();

这并不是要评论这是否是好的做法,而是希望帮助一些人找到根本原因。

hth

于 2011-01-13T21:49:42.917 回答
1

问题是您无法在加载的模块中定义全局样式。您可以为 Module 标记使用特定的样式名称,并在您的 css 中使用后代将样式应用于子组件:

<mx:Module styleName='mySubStyle' .../>

并在 css 中使用:

.mySubStyle s|Panel { color: #FF0000; }
于 2009-09-30T21:42:24.007 回答
0

将此添加到项目属性中的编译器标志中:

-show-unused-type-selector-warnings=false
于 2013-08-22T12:01:17.307 回答
0

看起来好像您需要命名您的 CSS:来自 文档:“类型选择器要么不受命名空间限定,要么不解析为链接到应用程序的 ActionScript 类,导致编译时出现警告。”

他们给出的例子是:

<Style>
    @namespace "library://ns.adobe.com/flex/spark";
    @namespace cx "com.mycompany.*";

    Button { color: #990000; }
    cx|MyFancyButton { color: #000099; }
</Style>

从您的示例中,您似乎缺少自定义命名空间,并且由于您的体系结构是模块化的,因此这些类不会在编译时解析为应用程序。

于 2009-10-07T05:49:11.937 回答
0

如果您仍然有这些警告,您是否可以检查您是否已将其中一个组件标记为要构建为应用程序?

那些“不正确”的 css 类型选择器警告出现在我的一个项目中。我注意到 Flex Builder 为我的一个组件制作了一个额外的应用程序(您可以在 bin-debug 文件夹中检查它)。一旦我将组件作为应用程序删除,警告就消失了。

请注意,组件中没有 css 声明,并且警告显示在我的主应用程序资源中。

您可以通过转到应用程序的属性面板,打开Flex 应用程序选项卡,选择组件并单击“删除”按钮来删除组件的“构建为应用程序”标记。

作为额外的奖励,编译时间减少了(至少快了 5 倍)。

于 2016-09-22T09:23:46.843 回答