Странная проблема построения Flex (не с ошибками, связанными с правильным кодом) - PullRequest
5 голосов
/ 23 ноября 2011

Примечание. Я несколько раз редактировал этот вопрос и переформатировал его, чтобы лучше неграмотно задавать вопрос.

Проблема

У меня возникла проблема с моей сборкой.Когда я добавляю в код действительное утверждение, оно больше не будет соответствовать и завершится ошибкой из-за несвязанного файла .Я сталкиваюсь с этими проблемами при сборке с помощью 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.Я думаю, что это пока останется загадкой.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2014

Я также столкнулся с этой проблемой и мог исправить ее со следующим изменением.Например, вместо:

model.textInput.text = "";

используйте

var ti:TextInput = model.textInput;
ti.text = "";

Это похоже на помощь.

0 голосов
/ 02 декабря 2011

Для диагностики проблем генерации кода MXML сохраните сгенерированный ActionScript, добавив «-keep» к дополнительным аргументам компилятора Flex.

Это позволит вам просматривать сгенерированные ActionScript компиляторами из вашей разметки MXML. Сгенерированные файлы классов включают в себя заглушки и классы, которые генерируются компилятором и используются для создания SWF-файла.

keep generated ActionScript

Перейдите к / bin / Генерируемый для просмотра источника.

...