代码之家  ›  专栏  ›  技术社区  ›  davr

禁用flex css类型选择器警告?

  •  14
  • davr  · 技术社区  · 15 年前

    我正在构建一个有点大的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'
    

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

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

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

    7 回复  |  直到 8 年前
        1
  •  6
  •   Andrew Aylett    15 年前

    如果您正在查看flexbuilder中的警告,那么应该能够使用eclipse的问题过滤gui。假设flex 4在这方面与flex 3非常相似,在右上角的problems标签上,有一个带有工具提示“configure the filters to be applied to this view”的按钮。是那个带箭头的。

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

        2
  •  2
  •   davr    15 年前

    所以我最后只是把源代码下载到编译器中,搜索它以找到警告,注释掉它,然后重新编译编译器。这与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;
             }
    

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

        3
  •  2
  •   supervacuo    12 年前

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

    我的项目有两个应用程序,有几个情况下,我需要接触其中一个或其他的应用程序,因为一个或其他原因。

    如果我按以下方式引用父应用程序,则会看到警告:

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

    如果我离开参考将军,错误就会消失:

    this.parentApplication.someFunction();
    

    这并不意味着评论这是否是一个好的做法,但它是希望帮助一些人找到根源。

    高温高压

        4
  •  1
  •   sharvey    15 年前

    问题是不能在加载的模块中定义全局样式。可以为模块标记使用特定的样式名,并在css中使用子体将样式应用于子组件:

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

    在css中使用:

    .mySubStyle s|Panel { color: #FF0000; }
    
        5
  •  0
  •   Oliver Turner    15 年前

    看起来您需要命名您的css: documentation :“类型选择器不受命名空间限制或不解析为链接到应用程序中的Actionscript类,在编译时会导致警告。”

    他们举的例子是:

    <Style>
        @namespace "library://ns.adobe.com/flex/spark";
        @namespace cx "com.mycompany.*";
    
        Button { color: #990000; }
        cx|MyFancyButton { color: #000099; }
    </Style>
    

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

        6
  •  0
  •   Alexander Farber    11 年前

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

    -show-unused-type-selector-warnings=false
    
        7
  •  0
  •   Dries Cleymans    8 年前

    如果仍然存在这些警告,是否可以检查是否已将某个组件标记为要作为应用程序生成?

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

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

    您可以通过转到 性质 打开应用程序的面板 flex应用程序 选项卡,选择组件并单击' 去除 按钮。

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