Примечание. Я несколько раз редактировал этот вопрос и переформатировал его, чтобы лучше неграмотно задавать вопрос.
Проблема
У меня возникла проблема с моей сборкой.Когда я добавляю в код действительное утверждение, оно больше не будет соответствовать и завершится ошибкой из-за несвязанного файла .Я сталкиваюсь с этими проблемами при сборке с помощью ant или сборке с помощью mxmlc в командной строке.
Добавление действительного оператора к myLittleBox.mxml вызовет эту ошибку.Обратите внимание:
- Все ошибки находятся в ViewerMain.mxml.Этот файл не является основным файлом mxml, но на него ссылаются из основного файла mxml.
- Перед изменением myLittleBox.mxml ViewerMain.mxml не было ошибок компиляции
- Естьнет ошибок, связанных с myLittleBox.mxml
- myLittleBox.mxml не имеет ссылок на ViewerMain и использует только компоненты spark
- ViewerMain.mxml не имеет прямых ссылок на myLittleBox.mxml.Дети его детей будут иметь ссылку на myLittleBox.mxml
- Допустимое утверждение, добавленное к myLittleBox.mxml, может содержать много вещей (все они нарушают его), включая комментарий.
Вопрос
Что может быть причиной этих ошибок?Как я могу их исправить?Подсказки или небольшие кусочки понимания очень приветствуются.
Ошибка компиляции (дополнительное чтение)
[mxmlc] Loading configuration file PATH_1\flex-config.xml
[mxmlc] PATH-3\ViewerMain.mxml(207): Error: Access of possibly undefined property p through a reference with static type com.....
[mxmlc] if(model.InfoBox && model.InfoBox.p)
[mxmlc] PATH-3\ViewerMain.mxml(209): Error: Implicit coercion of a value of type com.....InfoBox to an unrelated type flash.display:DisplayObject.
[mxmlc] InfoBoxContainer.addChild(model.infoBox);
[mxmlc] PATH-3\ViewerMain.mxml(228): Error: Call to a possibly undefined method toggleWin through a reference with static type com.....:InfoBox.
[mxmlc] model.InfoBox.toggleWin();
[mxmlc] PATH-3\ViewerMain.mxml(231): Error: Call to a possibly undefined method createCallback through a reference with static type com.......:InfoBox.
[mxmlc] return model.InfoBox.createCallback(e);
[mxmlc] PATH-3\ViewerMain.mxml(243): Error: Call to a possibly undefined method toggleWin through a reference with static type com.......:InfoBox.
[mxmlc] model.InfoBox.toggleWin();
[mxmlc] PATH-3\ViewerMain.mxml(246): Error: Call to a possibly undefined method createCallback2 through a reference with static type com.......:InfoBox.
[mxmlc] model.InfoBox.createCallback2(e);
[mxmlc] PATH-3\ViewerMain.mxml(256): Error: Call to a possibly undefined method onTitleClick through a reference with static type com..........:MapInfoBox.
[mxmlc] model.InfoBox.onTitleClick(e);
Фактический код (дополнительное чтение)
Рабочий код - хорошо компилируется без проблем(Необязательное чтение)
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
private var thisWillNotBrakeIt:String = "Done breaking";
]]>
</fx:Script>
<s:VGroup>
<s:Label text="Target:"/>
<s:HGroup>
<s:TextInput/>
<s:Button label="..."/>
</s:HGroup>
<s:Label text="Action"/>
<s:ComboBox/>
<s:Label text="Address"/>
<s:ComboBox/>
<s:CheckBox label="Open in new window"/>
<s:Label text="Parameters"/>
<s:Label text="TODO: Insert AutoSizeTree Component here"/>
<s:Button label="Edit (Change to image later)"/>
<s:Label text="Animals"/>
<s:ComboBox/>
</s:VGroup>
</s:Group>
Неработающий код - не компилируется с ошибками, указанными выше (Необязательное чтение)
<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
private var thisWillNotBrakeIt:String = "Done breaking";
/*
This
is
going
to
break
it.
Interestingly it
did not break it
but I bet that
this line will break it.
Break break break.
*/
]]>
</fx:Script>
<s:VGroup>
<s:Label text="Target:"/>
<s:HGroup>
<s:TextInput/>
<s:Button label="..."/>
</s:HGroup>
<s:Label text="Action"/>
<s:ComboBox/>
<s:Label text="Address"/>
<s:ComboBox/>
<s:CheckBox label="Open in new window"/>
<s:Label text="Parameters"/>
<s:Label text="TODO: Insert AutoSizeTree Component here"/>
<s:Button label="Edit (Change to image later)"/>
<s:Label text="Animals"/>
<s:ComboBox/>
</s:VGroup>
</s:Group>
Наблюдения (необязательное чтение)
Комментарийпохоже, что это не нарушает сборку, поскольку, если я добавлю более короткий комментарий, ошибок компиляции не будет.Например, если я заменим приведенный выше комментарий для этого комментария:
/*
This
is
going
to
break
it.
*/
сборка не будет нарушена.Одновременно, если я добавлю определение ArrayCollection, которое растянется на 4-5 строк, сборка будет нарушена.Но если определение растянуто всего на 1-2 строки, сборка не будет нарушена.
Другая информация (дополнительное чтение)
- Использование Flex 4.0
- Ant 1.7.0 (думаю, не уверен, что это лучший способ выяснить это. Iбудет, если кому-то понадобится информация).
- Eclipse (Flash Builder).
Временное решение (по запросу)
Мой проект выглядит так:
Model
/ \
Viewer 1 Viewer 2
У меня есть два зрителя, которые сняты с одной и той же модели.Они оба имеют ссылки на модель, но не имеют ссылок друг на друга, а модель не имеет ссылки ни на одно из средств просмотра.
- Файл ViewerMain.mxml находится в средстве просмотра 1.
- Файл myLittleBox.mxml находится в Viewer 2.
Я заметил, что Модель использует константу в Viewer 1. Это приводило к тому, что весь Viewer 1 создавался при создании Viewer 2.Я переместил константу из Viewer 1 в модель (где она действительно должна была быть в любом случае), и мой проект был успешно собран, так как Viewer 1 и Viewer 2 не создавались одновременно.
Имеет смысл, что это решит проблему, однако это всего лишь устранение симптома проблемы.Мне все еще очень любопытно, что вызывало ошибку компилятора на ViewerMain.mxml, когда я добавлял комментарий к myLittleBox.mxml.Я думаю, что это пока останется загадкой.