Отключить предупреждение о выборе типа CSS CSS?
Я создаю несколько большой проект Flex, который включает в себя несколько модулей (один проект Flex, который создает несколько SWF)
Прямо сейчас у меня есть один файл 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'
И повторите для Button, TextArea и т.д. и т.д. У меня так много бесполезных предупреждений, что невозможно увидеть, есть ли какие-либо допустимые.
Это предупреждение вызвано тем, что я делаю неправильно? Все стили применяются правильно и, похоже, работают так, как я хочу во время выполнения. Если я не делаю ничего плохого, могу ли я сказать компилятору игнорировать это предупреждение?
ПРИМЕЧАНИЕ. Я пробовал флаг -show-unused-type-selector-warnings=false
компилятора, и он не работает... для аналогичного, но другого предупреждения.
Ответы
Ответ 1
Если вы смотрите на предупреждения в FlexBuilder, вы должны использовать графический интерфейс фильтрации проблем Eclipse. Предполагая, что Flex 4 достаточно похож на Flex 3 в этом отношении, в теге проблем в правом верхнем углу есть кнопка с подсказкой "Настроить фильтры, которые будут применяться к этому представлению". Это тот, у которого есть стрелки.
В диалоговом окне фильтров на фильтр по умолчанию укажите описание "не содержит" и текст под ним "Селектора типов CSS не поддерживаются в компонентах".
Ответ 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;
}
Не самое элегантное решение... но эти предупреждения действительно раздражали.
Ответ 3
Еще одна причина, по которой я нашел это предупреждение, - это случай, когда вы ссылаетесь на parentApplication внутри класса.
В моем проекте есть 2 приложения, и есть несколько случаев, когда мне приходилось обращаться к одному или другому из приложений по той или иной причине.
Если я ссылаюсь на свою родительскую заявку следующим образом, я вижу предупреждения:
(this.parentApplication as SomeAppName).someFunction();
Если я оставляю ссылочный генерал, ошибки уходят:
this.parentApplication.someFunction();
Это не означает, что следует прокомментировать, является ли это хорошей практикой, но, надеюсь, поможет некоторым людям найти основную причину.
HTH
Ответ 4
Проблема заключается в том, что вы не можете определять глобальные стили в загруженных модулях. Вы можете использовать определенное имя для тега модуля и использовать потомок в своем CSS для применения стилей к дополнительным компонентам:
<mx:Module styleName='mySubStyle' .../>
и в css используйте:
.mySubStyle s|Panel { color: #FF0000; }
Ответ 5
Похоже, что вам нужно прописать ваш CSS-код: из документация: "Селектора типов, которые либо не определены пространством имен, либо не разрешать класс ActionScript, связанный с приложением, вызывают предупреждение во время компиляции."
Пример, который они приводят:
<Style>
@namespace "library://ns.adobe.com/flex/spark";
@namespace cx "com.mycompany.*";
Button { color: #990000; }
cx|MyFancyButton { color: #000099; }
</Style>
В вашем примере вам, похоже, не хватает пользовательского пространства имен, и, поскольку ваша архитектура является модульной, классы не разрешают приложение во время компиляции.
Ответ 6
Добавьте это в флаги компилятора в свойствах проекта:
-show-unused-type-selector-warnings=false
Ответ 7
Если у вас все еще есть эти предупреждения, можете ли вы проверить, отмечен ли какой-либо из ваших компонентов для сборки в качестве приложения?
Эти "неправильные" предупреждения о селекторе типа css появились в одном из моих проектов. Я заметил, что Flex Builder сделал дополнительное приложение для одного из моих компонентов (это можно проверить в папке bin-debug). Как только я удалил компонент в качестве приложения, предупреждения ушли.
Обратите внимание, что в компоненте не было объявления css, и предупреждения появились на моем основном ресурсе приложения.
Вы можете удалить метку "построить как приложение" для компонента, перейдя на панель свойств вашего приложения, откройте вкладку Flex Application, выберите компонент и нажмите кнопку "удалить".
В качестве дополнительного бонуса время компиляции уменьшилось (как минимум в 5 раз быстрее).