Не удалось найти определение ошибки при компиляции ClassReference из файла CSS в файл Swf - PullRequest
4 голосов
/ 17 февраля 2010

Я собираю свои CSS-файлы в SWF-файлы и загружаю их во время выполнения. У меня нет проблем с компиляцией и использованием операторов ClassReference большую часть времени:

.miniCashLadderGridStyle
{
    color : #2a2a2a;
    backgroundAlpha : 0;
    borderSkin : ClassReference("mx.skins.ProgrammaticSkin");
    headerSortSeparatorSkin : ClassReference("mx.skins.ProgrammaticSkin");
    horizontalSeparatorSkin : ClassReference("company.assets.GridHorzDivLine");
    verticalSeparatorSkin : ClassReference("company.assets.GridVertDivLine");
}

Это прекрасно работает. Активы поступают из отдельного SWC, однако это:

header-background-skin : ClassReference("company.view.grid.skin.HeaderBackground");

Не работает. Разница в том, что HeaderBackground - это класс в том же проекте, что и файл css. Это прекрасно скомпилируется, если я перенесу стиль в файл mxml.

Интересно, использует ли компилятор разные исходные пути при компиляции полей css или что-то подобное.

Это в FlashBuilder 4 build 269271 SDK 13963

Ответы [ 6 ]

2 голосов
/ 29 августа 2011

Поскольку класс скинов, на который вы ссылались, не был скомпилирован в приложение, если вы не используете его в другом месте, то при применении стиля SWF будет возникать ошибка класса времени выполнения, не найденная. Избегая этой ошибки, вы можете принудительно скомпилировать классы скинов в ваше приложение. Например:

<s:Application>
    import company.view.grid.skin.HeaderBackground;
    private var referrenceEnforcer:Array = [HeaderBackground];
</s:Application>
1 голос
/ 22 апреля 2010

Проблема в том, что когда вы компилируете css в swf во Flex / Flash Builder, он запускает mxmlc без пути сборки проекта, поэтому исходники не видны компилятору. Старая ошибка, поданная 2 года назад

Обходной путь - поместить необходимые пакеты в ту же папку, где находится css (даже символической ссылки достаточно). Компилятор будет видеть файлы и соответствующим образом компилировать их в классы.

0 голосов
/ 14 июня 2011
0 голосов
/ 12 ноября 2010

Попробуйте просто щелкнуть правой кнопкой мыши CSS в проводнике пакетов FlashBuilder 4, а затем скомпилировать CSS в SWF. Это, казалось, исправило это для меня.

0 голосов
/ 06 августа 2010

При компиляции CSS укажите swf модуля в параметре library-path компилятора, и он увидит класс.

0 голосов
/ 17 февраля 2010

Это может помочь:

Flex поддерживает внешние таблицы стилей CSS. Чтобы применить таблицу стилей к текущему документу и его дочерним документам, используйте свойство источника тега. Файлы внешних таблиц стилей должны находиться в папке, содержащей исходные файлы MXML. По умолчанию это папка src в вашем проекте MXML.

Примечание. Следует попытаться ограничить число таблиц стилей, используемых в приложении, и устанавливать таблицу стилей только в документе верхнего уровня в приложении (документе, содержащем тег). Если вы установите таблицу стилей в дочернем документе, могут возникнуть непредвиденные результаты.

В следующем примере определяются два селектора класса CSS во внешнем файле CSS с именем external.css. Вы используете внешний файл CSS в приложении Flex, указав его путь и имя файла в свойстве источника тега. Пример: Внешний файл CSS

/* An external CSS file */
.solidBorder
{
    borderStyle: "solid";
}

.solidBorderPaddedVertically
{
    borderStyle: "solid";
    paddingTop: 12px;
    paddingBottom: 12px;
}

MXML-файл

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    width="150" height="140" 
    viewSourceURL="src/StylesExternal/index.html"

>
    <mx:Style source="styles/external.css" />

    <mx:VBox styleName="solidBorder">

        <mx:Button label="Submit"/>
    </mx:VBox>

    <mx:VBox styleName="solidBorderPaddedVertically">
        <mx:Button label="Submit"/>
    </mx:VBox>

</mx:Application>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...