Работая с серией примеров Adobe AIR, я столкнулся с ошибкой компиляции с одним из них, который я поместил в следующий файл демонстрационного приложения
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.events.MenuEvent;
private static const MENU_DEMO:String = "Demo...";
private function onMenuItemClick(evt:MenuEvent):void
{
switch(evt.label)
{
case MENU_DEMO:
break;
}
}
]]>
</mx:Script>
<mx:VBox width="100%" height="100%" paddingBottom="5">
<mx:MenuBar id="menuBar"
width="100%"
labelField="@label"
itemClick="onMenuItemClick(event);">
<mx:XMLList>
<menuitem label="Error">
<menuitem label="{MENU_DEMO}" />
</menuitem>
</mx:XMLList>
</mx:MenuBar>
</mx:VBox>
</mx:WindowedApplication>
, для которого файл дескриптора
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://ns.adobe.com/air/application/1.0.M6">
<id>ErrorDemo</id>
<filename>ErrorDemo</filename>
<name>Error Demo</name>
<version>v0.1</version>
<description>Demo undefined property error</description>
<copyright></copyright>
<initialWindow>
<title>Error Demo</title>
<content>ErrorDemo.swf</content>
<systemChrome>standard</systemChrome>
<transparent>false</transparent>
<visible>true</visible>
</initialWindow>
</application>
Компиляция выдает следующий вывод
C:\Projects\AIR\ErrorDemo>amxmlc ErrorDemo.mxml
Loading configuration file C:\Projects\flex_sdk_4.6\frameworks\air-config.xml
C:\Projects\AIR\ErrorDemo\ErrorDemo.mxml(28): Error: Access of undefined property _ErrorDemo_XMLList1.
<menuitem label="{MENU_DEMO}" />
Проблема, похоже, заключается в использовании статического const {MENU_DEMO}, связанного с атрибутом метки тега menuitem, поскольку замена его текстом не приводит к ошибке компиляции. В документации Adobe по использованию Flex 4.6 говорится, что статические константы могут использоваться в качестве источников привязки данных, но, возможно, не так, как они используются здесь. Кто-нибудь знает, в чем проблема с их использованием таким образом?
Для пояснения: замена связанной константной ссылки {MENU_DEMO}
строковым литералом Demo...
дает следующий ожидаемый результат. Но использование строкового литерала вместо ссылки связанной константы лишает смысла использование связанной константы. Который, кажется, вызывает ошибку, и в этом суть этого поста.