禁用Flex CSS类型选择器警告?

时间:2009-09-30 18:06:08

标签: css flex flex4 warnings flex-spark

我正在构建一个包含多个模块的大型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'

重复按钮,TextArea等等。我有很多无用的警告,不可能看出是否有任何有效的警告。

这个警告是由我做错了吗?这些样式都正确应用,并且似乎在运行时以我想要的方式工作。如果我没有做错什么,我可以告诉编译器忽略这个警告吗?

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

7 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分: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;
         }

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

答案 2 :(得分:2)

我发现此警告的另一个原因是当您从类中引用parentApplication时。

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

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

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

如果我将引用保留为常规,则错误消失:

this.parentApplication.someFunction();

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

HTH

答案 3 :(得分:1)

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

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

并在css中使用:

.mySubStyle s|Panel { color: #FF0000; }

答案 4 :(得分:0)

看起来你需要命名你的CSS:来自documentation:“类型选择器不是由命名空间限定的,或者不解析为链接到Application的ActionScript类在编译时导致警告时间“。

他们给出的例子是:

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

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

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

答案 5 :(得分:0)

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

-show-unused-type-selector-warnings=false

答案 6 :(得分:0)

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

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

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

您可以将“&#39; build”删除为应用程序&#39;通过转到应用程序的属性面板标记组件,打开 Flex应用程序标签,选择该组件,然后单击&#39; 删除&#39;按钮。

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