Недавно я завершил проект для пользовательского пользовательского отчета в Flex. Теперь мне поручено создать новое приложение, которое по сути является «облегченной» версией исходного пользовательского интерфейса. Он будет включать только некоторые из параметров, которые находятся в исходном приложении. Кроме того, это должно быть отдельное приложение.Как структурировать несколько проектов Cairngorm MVC с несколькими компонентами?
Я не хочу дублировать свой код, поэтому планирую переместить кучу классов из исходного приложения в новую библиотеку, которая может использоваться обоими приложениями. Тем не менее, я пытаюсь понять, как сделать эту работу в моей среде MVC.
Например, у меня есть компонент Accordion, который позволяет пользователям фильтровать несколько элементов. Каждый ребенок Аккордеона является экземпляром настраиваемого компонента с двумя списками (один для сущностей, доступных для выбора, другой для объектов, выбранных пользователем). Каждый дочерний компонент имеет свойства, связанные с моделью и функциями, которые вызывают события Cairngorm.
Вот упрощенный пример:
FiltersAccordion.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:Accordion xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:local="*">
<mx:Script>
<![CDATA[
import model.ModelLocator;
[Bindable]
private var __model:ModelLocator = ModelLocator.getInstance();
]]>
</mx:Script>
<local:GenreFilter availableGenres="{__model.availableGenres}"
selectedGenres="{__model.selectedGenres}" />
<local:ArtistFilter availableArtists="{__model.availableArtists}"
selectedArtists="{__model.selectedArtists}" />
<local:LabelFilter availableLabels="{__model.availableLabels}"
selectedLabels="{__model.selectedLabels}" />
</mx:Accordion>
GenreFilter.mxml:
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import control.events.AddGenresEvent;
import control.events.RemoveGenresEvent;
import model.ModelLocator;
[Bindable]
private var __model:ModelLocator = ModelLocator.getInstance();
[Bindable]
public var availableGenres:ArrayCollection;
[Bindable]
public var selectedGenres:ArrayCollection;
private function addGenresButton_clickHandler():void
{
var event:AddGenresEvent = new AddGenresEvent();
event.availableGenres = availableGenres;
event.selectedGenres = selectedGenres;
event.itemsToAdd = availableGenresList.selectedItems;
event.dispatch();
}
protected function removeGenresButton_clickHandler():void
{
var event:RemoveGenresEvent = new RemoveGenresEvent();
event.availableGenres = availableGenres;
event.selectedGenres = selectedGenres;
event.itemsToRemove = selectedGenresList.selectedItems;
event.dispatch();
}
]]>
</mx:Script>
<mx:List id="availableGenresList" dataProvider="{availableGenres}" />
<mx:VBox>
<mx:Button id="addButton" icon="{rightArrowIcon}" width="22"
height="22" click="addGenresButton_clickHandler();" />
<mx:Button id="removeButton" icon="{leftArrowIcon}" width="22"
height="22" click="removeGenresButton_clickHandler();" />
</mx:VBox>
<mx:List id="selectedGenresList" dataProvider="{selectedGenres}"
width="100%" height="100%" allowMultipleSelection="true" />
</mx:HBox>
ArtistFilter.mxml и LabelFilter.mxml в значительной степени тот же дизайн, как GenreFilter.mxml, но и использовать их конкретных событий.
Итак, как мне это сделать? Не имеет смысла перемещать мою модель в общую библиотеку. Я просто хочу просто создать компоненты View в библиотеке. Неужели я полностью покинул свой рокер здесь или что?
Вы попали в гвоздь на голове: ModelLocator - это всего лишь глобальные переменные, которые скрыты. –