Как я могу поделиться одним и тем же объектом NetConnection между двумя представлениями?

StackOverflow https://stackoverflow.com/questions/6318536

Вопрос

Flex Mobile Applications основаны на просмотре. И я использую Adobe Cirrus (я предполагаю, что это то же самое для любой FMS NetConnection). Кто -нибудь знает, как поддерживать постоянную сеть между представлениями в гибком мобильном приложении?

РЕДАКТИРОВАТЬ: Чтобы попытаться объяснить, что мне нужно более четко ...

Так что очень просто здесь, я подключаюсь к Cirrus

netConnection = new NetConnection();
netConnection.addEventListener(NetStatusEvent.NET_STATUS, cirrusStatusHandler);
netConnection.connect(CirrusAddress + "/" + DeveloperKey);

Тогда у меня есть это, чтобы вызвать определенные функции в зависимости от состояния соединения,

protected function cirrusStatusHandler(event:NetStatusEvent):void

                switch (event.info.code)
                {
                    case "NetConnection.Connect.Closed" :
                        trace(event.info.code);
                        break;

                    case "NetConnection.Connect.Rejected" :
                        trace(event.info.code);
                        break;

                    case "NetConnection.Connect.Failed" :
                        trace(event.info.code);
                        break;

                    case "NetConnection.Connect.Success" :
                        trace(event.info.code);
                        break;

                    case "NetGroup.Connect.Success" :
                        trace(event.info.code);
                        break;

                    case "NetGroup.Posting.Notify" :
                        trace(event.info.code);
                        break;

                    case "NetGroup.Neighbor.Connect" :
                        trace(event.info.code);
                        break;

                    case "NetGroup.Neighbor.Disconnect" :
                        trace(event.info.code);
                        break;

                    case "NetGroup.SendTo.Notify" :
                        trace(event.info.code);
                        break;

                    case "NetStream.Connect.Success" :
                        trace(event.info.code);
                        break;

                    case "NetStream.Publish.Start" :
                        trace(event.info.code);

                        break;

                    case "NetStream.Play.Start" :
                        trace(event.info.code);
                        break;

                    case "NetStream.Play.Failed" :
                        trace(event.info.code);
                        break;


                    case "NetStream.Play.Stop" :
                        trace(event.info.code);
                        break;

                    case "NetStream.Connect.Closed" :
                        trace(event.info.code);
                        break;  

                    case "NetStream.Play.UnpublishNotify" :
                        trace(event.info.code);
                        break;  

                    case "NetStream.Unpublish.Success" :
                        trace(event.info.code);
                        break;

                }
            }

Я хочу иметь возможность trace(netConnection.nearID) С этой точки зрения, перейдите к другому взгляду и trace(netConnection.nearID) и получить тот же результат. и иметь возможность иметь cirrusStatusHandler() Функция, как будто у меня есть выше, чтобы слушать события Cirrus. Тогда сможет сделать netConnection.close() На другом взгляде, если я хочу иметь возможность закрыть соединение.

Мозговой штурм идеи о том, что я думал, я могу сделать:

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

Может быть, я мог бы объявить netcon var в файле ViewNavigatorApplication MXML и просто добавить слушателей событий в эти VAR в каждом представлении?

Но я не знаком с доступом к VAR, который существует в файле MainViewNavigatorApplication MXML

Мне просто нужно иметь возможность установить соединение один раз, а затем оно остается настойчивым, пока я не позвоню netConnection.close()

Любые идеи? Это возможно? Простой? Действительно сложно?

Я предполагаю, что я мог бы использовать отдельные представления, где мне не нужна NetConnection, и просто иметь конкретный взгляд использования «состояния» в представлении, где NetCon должен быть настойчивым. Просто кажется глупым использовать состояния, так как это приложение, основанное на представлении.

РЕДАКТИРОВАТЬ: @ Flextras Ответ:

Обновлено:

Вот что мне нужно скомпилировать без каких -либо ошибок (пока я не отлаживаю, тогда я не получу сбой, я объясню)

Вот основной файл viewNavigatorApplication myApp.mxml, я поместил это там:

public static var netConnection:NetConnection;
public static var groupspec:GroupSpecifier; 
public static var netGroup:NetGroup;

views.HomeView.netConnection = netConnection;
views.ProfileView.netConnection = netConnection;
views.HomeView.groupspec = groupspec;
views.ProfileView.groupspec = groupspec;
views.HomeView.netGroup = netGroup;
views.ProfileView.netGroup = netGroup;

Затем в моем пакете просмотров .. profileView.mxml:

public static var netConnection:NetConnection;
public static var groupspec:GroupSpecifier;
public static var netGroup:NetGroup;

И то же самое, по моему дому

Но я получаю нулевую ошибку, когда пытаюсь позвонить

trace(netConnection.nearID) В функции CRATIONCOMPLETE в ProfileView (который после HomeView), чтобы увидеть, имеет ли она одинаковую сеть и должен быть в состоянии получить одинаковую ближайшую

Это было полезно?

Решение 4

Это ответ: Stackoverflow не позволит мне отметить этот ответ в течение 2 дней. Я отмечу это как таковое, а затем извините, что его оставляют открытым.

Хорошо, я всегда знал, что ты можешь передать объект данных при толчке представлений, и я использовал его для основной информации и вещей, но я не знал Это будет работать так. И мудрый производительность, я думаю, это способ пойти на мобильные приложения, потому что вместо того, чтобы заставлять что -то запускать все время, я просто передаю его через представления, будет разрушено каждое предыдущее представление.

Вот все, что потребовалось. Вот он, у меня уже был на моем первом обзоре:

public var netConnection:NetConnection;
public var groupspec:GroupSpecifier;
public var netGroup:NetGroup;

Затем я просто помещаю эти VAR в объект и при той же представлении, как вы бы передали любые другие данные в представление:

    var goToNextView:Object=new Object();
    goToNextView.netConnection = netConnection;
    goToNextView.groupspec = groupspec;
    goToNextView.netGroup = netGroup;

    navigator.pushView(views.ProfileView,goToProfileObject);

Затем в следующем представлении получили данные от объекта, как это:

netConnection = data.netConnection;
groupspec= data.groupspec;
netGroup = data.netGroup;

Затем я сделал трассировку (netconnection.nearid) на новом представлении, и это было то же самое, что и на представлении, так что это работает!

Спасибо за то, что я получил правильное направление для решения этих гибких кодеров, решение, которое вы опубликовали, было больше о настройке глобальных VAR, это решение использует навигатор Flex Mobile Ablication для передачи объектов так, как они, я думаю.

Другие советы

Похоже, вы смешиваете ответственность за просмотр и услуги.

Взгляните на некоторые рамки, чтобы помочь вам с подходом MVC - я бы посоветовал Петру (потому что это то, что я знаю), но я слышал, что роботлеги также великолепен и возможно больше подходит для мобильного приложения,

Вообще говоря - взгляды не должны иметь явных знаний о услугах - они обычно объявляются в другом месте (как в контексте с использованием петрушки или роботлегов.)

Логика для ваших взглядов инкапсулируется в модель презентации (PM). Это особенно важно при создании мобильных приложений, где одна и та же логика, вероятно, будет применяться ко многим различным версиям вашего представления (т.е., Android, iOS, планшет и т. Д.).

Затем вы можете использовать обмен сообщениями (события) для отправки обновлений статуса и использовать PM для проведения постоянного состояния в вашем заявлении.

Если вы хотели спросить: «Как я могу поделиться одной и той же NetNection между несколькими представлениями».

Просто дайте каждому представлению ссылку на один и тот же объект NetConnection. Каждое представление может иметь свои собственные, разные слушатели для событий, отправленных из объекта NetConnection.

Это не должно быть более сложным, чем создание свойства в классах ProfileView и Homeview, например:

public var netConnectionInstance : NetConnection;

Вы можете, буквально, поместить одну и ту же строчку в обоих классах.

В классе, который содержит оба взгляда, сделайте что -то вроде этого:

var netConnectionInstance = new NetConnection()
profileView.netConnectionInstance  = netConnectionInstance;
homeView.netConnectionInstance  = netConnectionInstance;

В этом случае я предполагаю, что и ProfileView, и Homeview - дети одного класса. Вещи могут стать немного сложнее, если у вас есть более сложная структура объекта дисплея; Но концепция такая же.

Вы можете использовать такой шаблон дизайна, как Singleton, для поддержания постоянной связи между вашими взглядами

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top