Как я могу поделиться одним и тем же объектом NetConnection между двумя представлениями?
-
26-10-2019 - |
Вопрос
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, для поддержания постоянной связи между вашими взглядами