Как создать модель экземпляра, которую можно совместно использовать в компоненте (которую можно создать более одного раза) - PullRequest
0 голосов
/ 20 мая 2010

Я пытаюсь создать модульную структуру, которая в конечном итоге будет жить в другом приложении actionscript / flex. Я использую cairngorm во внешнем приложении, и я хотел бы создать более одного экземпляра этого нового компонента во внутреннем приложении. Cairngorm не работает для создания нескольких дубликатов компонентов из-за одноэлементного характера модели.

Компонент, который я создаю, является средством просмотра псевдо-видео. Я хотел бы иметь общую модель в этом экземпляре компонента. Я борюсь со способом поделиться одной моделью внутри компонента. Если я использую шаблон синглтона, я не могу создать более одного экземпляра этого компонента. Если я создаю экземпляр и позволяю компоненту убедиться, что он есть только один, у меня возникают проблемы с передачей модели всем компонентам, которые ее хотят. Это особенно сложно, потому что .mxml компоненты не могут иметь конструктор, который я бы передавал в модели.

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

Кто-нибудь знает способ создания переменной экземпляра внутри компонента, чтобы можно было создавать несколько компонентов, но также легко делиться этой моделью по всему компоненту?

1 Ответ

0 голосов
/ 17 декабря 2010

В новейшей версии Swiz ( 1.0.0 ) есть ответ на этот вопрос. Теперь вы можете создать более одного экземпляра Swiz в проекте и настроить родительские дочерние отношения. На странице поддержки модулей они объясняют это лучше всего (http://swizframework.jira.com/wiki/display/SWIZ/Module+Support), но на самом деле вам не нужно использовать модули, все родительские дочерние отношения будут работать.

Просто помните, что для того, чтобы каждый обработчик событий не реагировал на событие из дочернего представления, вам нужно установить локальную область EventHandler, например:

[EventHandler( event="TestEvent.SAVE_USER_REQUESTED", scope="local")]
public function handleEvent(event:Event):void {
    //do stuff
}
...