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