Более одного titleWindow в приложении Flex
Я ГИС-аналитик, который был переведен на должность программиста-аналитика. Это был тяжелый переход для меня, так как у меня не было большого опыта программирования, но я был вовлечен в это.
Я работаю над приложением Flex на странице JSP. По сути, это сетка 3х2, в которой есть изображения и текст. Я пытаюсь сделать так, чтобы на этой странице было несколько ссылок на titleWindow, чтобы при нажатии на изображение открывалось titleWindow. (Если у кого-то есть идея получше, особенно если это связано с наведением, я очень открыт для этого!) В настоящее время у меня она работает для одного изображения. Однако, когда я пытаюсь добавить вторую функцию, это вызывает у меня ошибки. "Ошибка 1021: повторяющееся определение функции" Ниже приведен весь код главной страницы, которая вызывает titleWindow. Код ниже - это то, что выдает ошибку 1021.
<?xml version="1.0" encoding="utf-8"?>
<![CDATA[
import flash.geom.Point;
import mx.containers.TitleWindow;
import mx.core.IFlexDisplayObject;
import mx.managers.PopUpManager;
import windows.SimplePopupWindow;
private var point1:Point = new Point();
private function showWindow():void {
var login:SimpleTitleWindowExample=SimpleTitleWindowExample(PopUpManager.createPopUp( this, SimpleTitleWindowExample , true));
point1.x=131;
point1.y=119;
point1=roadStatus.localToGlobal(point1);
}
private var point2:Point = new Point();
private function showWindow():void {
var login:SimpleTitleWindowExampleFlood=SimpleTitleWindowExampleFlood(PopUpManager.createPopUp( this, SimpleTitleWindowExampleFlood , true));
point2.x=289;
point2.y=119;
point2=floodplain.localToGlobal(point2);
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:BorderContainer x="10" y="0" width="750" height="600" backgroundColor="#BBB082" backgroundAlpha="1.0" cornerRadius="20" borderColor="#E8DBA7">
<s:Panel x="10" y="10" width="728" height="578" cornerRadius="20" chromeColor="#983D3A" borderColor="#F1EFE7" backgroundColor="#BBB082">
<mx:Image x="131" y="119" width="150" height="115" source="file://GIS Map Portal/images/Map Images/SJCRoadStatus2_small.jpg" id="roadStatus" click="showWindow();"/>
<mx:Image x="289" y="119" width="150" height="115" source="file://GIS Map Portal/images/Map Images/SJCRoadStatus_small.jpg" id="floodplain" click="showWindow();"/>
<mx:Image x="447" y="119" width="150" height="115" source="file://GIS Map Portal/images/Map Images/SJCRoadStatus2_small.jpg"/>
<s:Label x="131" y="242" text="SJC Road Status"/>
<s:Label x="289" y="242" text="SJC Floodplain"/>
<s:Label x="447" y="242" text="Assessor's Parcels"/>
<mx:Image x="131" y="262" width="150" height="115" source="file://GIS Map Portal/images/Map Images/SJCRoadStatus_small.jpg"/>
<mx:Image x="289" y="262" width="149" height="115" source="file://GIS Map Portal/images/Map Images/SJCRoadStatus2_small.jpg"/>
<mx:Image x="446" y="262" width="151" height="115" source="file://GIS Map Portal/images/Map Images/SJCRoadStatus_small.jpg"/>
<s:Label x="131" y="385" text="Label"/>
<s:Label x="289" y="385" text="Label"/>
<s:Label x="446" y="385" text="Label"/>
<s:Label x="229" y="24" text="San Juan County Web Maps" fontFamily="Calvin and Hobbes" fontSize="25"/>
</s:Panel>
</s:BorderContainer>
Ниже приведен код заголовка окна. Этот код работает до сих пор!
<?xml version="1.0" encoding="utf-8"?>
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
import mx.controls.Text;
// A reference to the TextInput control in which to put the result.
public var loginName:Text;
// Event handler for the OK button.
private function returnName():void {
//loginName.text="Name entered: " + userName.text;
PopUpManager.removePopUp(this);
}
]]>
</mx:Script>
<mx:HBox width="323" height="147" borderColor="#E8DBA7" dropShadowVisible="true">
<mx:Text text="The San Juan County GIS Department maintains aninteractive web map dedicated for researching county roads, but also includes city limits, lakes and rivers, and other geographic data.
" width="319" height="76" textAlign="center" color="#FFFFFF"/>
</mx:HBox>
<mx:HBox>
<mx:Button label="Go" click="navigateToURL(new URLRequest(''), 'quote')"/>
<mx:Button label="Back" click="PopUpManager.removePopUp(this);"/>
</mx:HBox>
Вопрос: Какой код мне нужно изменить выше, чтобы можно было добавить более одного titleWindow (до 6), или какой код можно использовать для наведения курсора, чтобы открыть "окно" или всплывающую подсказку?
Если у кого-то есть идеи или они могут направить меня вообще, это было бы здорово. Я ценю его!
1 ответ
Похоже, тебя только что бросили в глубокий конец. Вообще говоря, нет никаких ограничений на количество окон титров, которые вы можете открыть, класс PopUpManager обрабатывает любой UIComponent, который вы говорите, чтобы он открывался как всплывающее окно, и один из аргументов статических методов.createPopUp или addPopUp в менеджере примет модальный параметр, который указывает, должно ли пользовательское взаимодействие быть заблокировано (указано размытием приложения) или окно должно быть просто показано. Скорее всего, эта ошибка связана с вашим расширением TitleWindow (SimpleTitleWindowExample), которое вы можете опубликовать в этом коде. Также в качестве отправной точки по теме ознакомьтесь со следующей документацией:
Дженерал Флекс:
http://www.adobe.com/devnet/flex/videotraining.html
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/index.html
^ обратите внимание на время выполнения и варианты выбора продуктов в верхней части экрана, выберите в соответствии с SDK, с которым вы строите (или выберите SDK на основе функций)
PopUpManager: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/managers/PopUpManager.html() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/managers/PopUpManager.html() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/managers/PopUpManager.html()
Подсказки: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/managers/ToolTipManager.html() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/managers/ToolTipManager.html()
Если у вас все еще есть проблемы, определенно опубликуйте код для пользовательского TitleWindow, а также какую версию SDK вы используете, чтобы я мог попытаться скопировать.
РЕДАКТИРОВАТЬ: Ладно, увидев, что остальная часть вашего кода очищает его... вы не можете иметь две функции с одинаковым точным именем, так что в вашем коде у вас есть showWindow как функция, которая объявляется два раза (я не уверен как это происходит после компиляции, я бы предположил, что компилятор будет достаточно умен, чтобы увидеть эту ошибку до выполнения, но это именно то, что есть). Измените другое showWindow на что-то вроде showOtherWindow или что-то в этом роде. Выглядит так, как будто вы пришли из процедурного фона программирования (C или другой не-ООП-язык). Объектно-ориентированное программирование занимает немного времени, чтобы прийти в себя, но имеет гораздо больше смысла, когда дело доходит до решения реальных проблем, как только вы поймите это, в основном вы настраиваете описания и отправляете сообщения между объектами, используя вызовы методов, а когда вы определяете класс, через AS или MXML вы определяете методы (порядок определений метода / свойства не имеет значения, все еще процедурный, как шаг за шагом в методах, но порядок объявления метода или свойства не имеет никакого эффекта).
Это может быть полезно: http://www.codeproject.com/KB/architecture/OOP_Concepts_and_manymore.aspx
Я в основном на противоположном конце спектра с точки зрения навыков, у меня есть формальное образование в университете информатики DePaul, но в настоящее время я занимаюсь большим количеством флеш-кода Google Maps, поэтому я нахожу себя все больше и больше необходимость понимать датумы и другую специальную информацию ГИС (просто подумал, что было бы интересно найти кого-то на том же перекрестке, но идти другим путем:).