我建立一个稍微大的Flex项目,包括几个模块(即产生多个主权财富基金单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的)。 我注意到警告的数量被关联到模块的数量......我每次添加一个模块的时候,我得到更多的警告。 现在,我得到6个警告,在CSS文件中的每个条目,所以:
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
编译器标志,它不工作...这是一个类似但不同的警告。
如果您正在寻找在弹性生成的警告,你应该能够使用Eclipse的问题过滤GUI。 假设Flex 4的足够类似于在这方面Flex 3中,上右上方的问题标签,有一个与工具提示“配置的过滤器被应用到该视图”的按钮。 这是一个用箭头。
在过滤器对话框中,在默认的过滤器,集描述为“不包含”下为“CSS类型选择不在组件支持”的文字。
所以我最终只是下载源代码的编译器,通过它搜索以警告,评论它,并重新编译,编译器。 这是对标记为秋葵β2版本。
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;
}
没有最完美的解决方案......但这些警告是真的越来越烦。
另外一个原因,我发现这个警告的情况下,当你从一个类中引用的parentApplication。
我的项目有2个应用程序,并且有,当我需要将手伸入一个或其他的原因之一或其他应用程序的几种情况。
如果我引用我的parentApplication如下,我看到了警告:
(this.parentApplication as SomeAppName).someFunction();
如果我离开参考一般情况下,错误消失:
this.parentApplication.someFunction();
这并不意味着在这个是否是很好的做法发表评论,但它是希望能帮助一些人找到了根源。
心连心
问题是,你不能在加载的模块定义的全局样式。 您可以使用特定的样式名的模块标记和使用后代在你的CSS的样式应用到子组件:
<mx:Module styleName='mySubStyle' .../>
并在CSS使用:
.mySubStyle s|Panel { color: #FF0000; }
它看起来好像你需要命名空间你的CSS:从文件 :“那可能是没有被命名空间限定或者不解析链接到应用程序的ActionScript类会在编译时警告类型选择。”
他们给出的例子是:
<Style>
@namespace "library://ns.adobe.com/flex/spark";
@namespace cx "com.mycompany.*";
Button { color: #990000; }
cx|MyFancyButton { color: #000099; }
</Style>
从你的榜样,你似乎缺少自定义命名空间,并且因为你的架构是模块化的,这些类不会解决在编译时应用。
在项目属性此添加到编译器标志:
-show-unused-type-selector-warnings=false
如果您仍然有这些警告,您可以检查是否有显着的组件之一是建立一个应用?
那些“不正确” CSS类型选择警告在我的一个项目出现了。 我注意到,Flex Builder中提出一个额外的应用程序为我的部件之一(可以检查这在你的bin-debug文件夹)。 当我删除的组件作为一个应用程序,该警告就走开了。
请注意,在该组件没有CSS声明,并警告我的主要应用程序的资源出现了。
您可以将您的应用程序的属性面板中删除了“打造为一个应用程序的大关组件,打开Flex应用程序选项卡,选择组件,然后单击“ 删除 ”按钮。
作为一个额外的好处,编译时间缩短(至少5倍的速度)。