【问题标题】:Disable Flex CSS type selector warning?禁用 Flex CSS 类型选择器警告?
【发布时间】:2010-12-02 18:05:23
【问题描述】:

我正在构建一个包含多个模块的大型 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 编译器标志,但它不起作用...这是一个类似但不同的警告。

【问题讨论】:

  • 在编译时添加赏金...161 警告根本无法管理。如果有人需要,我可以生成一个精简的 Flex Builder 项目示例,该项目会产生此问题。

标签: css apache-flex flex4 warnings flex-spark


【解决方案1】:

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

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

【讨论】:

  • 这行得通,谢谢! Flex 4 中的 GUI 略有不同(因为它基于 Eclipse 的较新版本),但基本思想相同,它位于问题视图右上角那个三角形隐藏的秘密小菜单中。跨度>
【解决方案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;
         }

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

【讨论】:

  • 供以后参考:如果有人问得足够好,我可以上传编译好的编译器……但它是 100MB,所以我不会上传它以防万一。
【解决方案3】:

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

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

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

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

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

this.parentApplication.someFunction();

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

【讨论】:

  • 我遇到了这种情况,我通过创建一个接口 IApp 并在我之前使用主模块 Main 的其余代码中使用这个接口来解决它。
【解决方案4】:

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

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

并在 css 中使用:

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

【讨论】:

  • 我没有在加载的模块中定义全局样式,而是在我的主、根、父、非模块 SWF 中定义它。那是我引用 CSS 文件的唯一地方......所有模块都没有
  • 这是一个警告,而不是错误,但是是的,它被导入的唯一位置是在根 标记中。
  • 愚蠢的问题,但你有没有做过类似的事情: ...
  • 不,样式标签是应用标签内的第一件事
  • 如果您的主 节点子类化应用程序,则会出现问题,编译器不会意识到它是应用程序并引发警告。
【解决方案5】:

看起来你需要命名你的 CSS:来自documentation:“类型选择器要么没有被命名空间限定,要么不解析为链接到应用程序的 ActionScript 类,导致编译时出现警告。 "

他们给出的例子是:

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

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

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

【讨论】:

  • 我的 CSS 文件中的所有类型都使用命名空间。类型解析正常,样式应用得很好,就像我说的那样。
  • 我知道样式正在被应用,但这与您提出的观点无关,即您收到警告。
  • 我相信这会引发不同的警告。
  • 我的(继承的)Flex 3.5 项目中有 62 条“不支持 CSS 类型选择器...”消息。我根本没有对类型选择器进行命名空间;遗憾的是,这样做对警告没有任何影响。
【解决方案6】:

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

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

【讨论】:

  • 我已经使用覆盖方法将我的 Adob​​e Air SDF 从 3.1 更新到 17.0,现在它发现了 10 个关于 css 的警告,而我的应用程序中只有一个按钮,所以我尝试找到一个解决方案和你的找到了答案,我已经尝试过您的解决方案,但它不起作用,是否有任何其他解决方案可以消除此警告?
【解决方案7】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 2011-02-27
    • 2021-04-08
    • 1970-01-01
    • 2012-05-04
    • 2021-12-20
    • 2017-12-06
    • 1970-01-01
    • 2019-07-30
    相关资源
    最近更新 更多