Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.09.2009, 16:57
Night_rainbow вне форума Посмотреть профиль Отправить личное сообщение для Night_rainbow Найти все сообщения от Night_rainbow
  № 1  
Ответить с цитированием
Night_rainbow

Регистрация: Sep 2009
Сообщений: 18
По умолчанию RemoteObject

Подскажите, пожалуйста, best practice по использованию RemoteObject

К примеру, у меня есть некоторый бин, с которым я буду связываться посредством RemoteObject. У этого бина куча методов, к примеру.
Каждый раз создавать RemoteObject в каждой mxml как-то громоздким кажется.
Нельзя ли вынести этот RemoteObject в отдельный mxml, прописать все существующие методы и не создавать этот объект каждый раз, а обращаться к статическим методам, например, созданным в объекте, который наследует RemoteObject

То есть
Код AS3:
...
MyRemoteObject extend RemoteObject{
...
 
public static function getSmth():ArrayCollection{
   return getSmth();  //из <mx:method name="getSmth"..../>
}
}
Что-то в этом роде... или как правильно, подскажите, пожалуйста?

Старый 23.09.2009, 18:00
Alex_41 вне форума Посмотреть профиль Отправить личное сообщение для Alex_41 Найти все сообщения от Alex_41
  № 2  
Ответить с цитированием
Alex_41
[+4 01.09.09]

Регистрация: Aug 2009
Сообщений: 27
Мб не "best practice", но я вижу так (на работоспособность после копи-паста не проверял):

Код AS3:
package service
{
  import mx.controls.Alert;
 
	import mx.messaging.ChannelSet;
	import mx.messaging.channels.AMFChannel;
 
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.remoting.RemoteObject;
 
	public class MyService extends RemoteObject
	{
		private	var amfChannel: AMFChannel;
 
		public function MyService(){
			initRemoteObject();
		}
 
		private function initRemoteObject():void{
			channelSet = new ChannelSet();
			amfChannel = new AMFChannel("Your destination", "Your uri");			
			channelSet.addChannel(amfChannel);
 
			destination = "Your destination";
			source = "Your source";
 
			getOperation("MethodName").addEventListener(ResultEvent.RESULT, rhMethodName);
			getOperation("MethodName").addEventListener(FaultEvent.FAULT, faultHandler);
		}
 
		public function callMethodName():void{
		    getOperation("MethodName").send();        	
		}
 
		private function rhMethodName(event: ResultEvent):void{
		     // your code here	
		}
 
		private function faultHandler(fault: FaultEvent):void{
		    // your code here
		    Alert.show("Method name: " + fault.currentTarget.name + "\n \n" + fault.message.toString(), "Fault Message");
		}
	}
}
Код AS3:
package service
{
	public class MyServiceSingleton 
	{
		private static var ms: MyService;
 
		public static function getInstance():MyService{
			if(ms == null){
				ms = new MyService();
			}
			return ms;
		}
	}
}
Код AS3:
var myService: MyService = MyServiceSingleton.getInstance();
myService.callMethodName();


Последний раз редактировалось Alex_41; 23.09.2009 в 18:04.
Старый 23.09.2009, 18:06
Night_rainbow вне форума Посмотреть профиль Отправить личное сообщение для Night_rainbow Найти все сообщения от Night_rainbow
  № 3  
Ответить с цитированием
Night_rainbow

Регистрация: Sep 2009
Сообщений: 18
Да, спасибо большое. Я это уже смотрел.. хотелось сделать вот такого рода штуку:

Код AS3:
package remote {
import mx.rpc.AbstractOperation;
import mx.rpc.remoting.mxml.RemoteObject;
 
public class MyRemoteObject extends RemoteObject{
    private static var instance:MyRemoteObject = new MyRemoteObject();
 
    public function MyRemoteObject() {
        super();
        destination = "flexuserDaoService";
        endpoint = "http://ausatov:8080/flexapp/springwraper/messagebroker/amf";
 
    }
 
    public static function getAllFlexUsers(func:Function):void {
        instance.addEventListener("result", func);
        var op:AbstractOperation = instance["getAllFlexUsers"];
        op.send();
 
    }
 
}
 
}
Нормально ли выглядит? Понятное дело, что доработать нужно - чтобы и параметры кидать методу...
И надо слушателя удалять после того, как получили ответ....


Последний раз редактировалось Night_rainbow; 23.09.2009 в 18:13.
Старый 23.09.2009, 18:12
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
>> Подскажите, пожалуйста, best practice по использованию RemoteObject
Не использовать его Использовать NetConnection, у него и API вменяемые, и работать будет соответственно быстрее, да и вообще... если вы не используете MXML готовые решения, то смысла расширять фреймворковские классы нет. Фреймворк хорош когда нужно быстро из полуфабрикатов пожрать приготовить, но если вы уже решили по-настоящему готовить, то смысл покупать лапшу быстрого приготовления отсутствует
__________________
Hell is the possibility of sanity

Старый 23.09.2009, 18:19
Night_rainbow вне форума Посмотреть профиль Отправить личное сообщение для Night_rainbow Найти все сообщения от Night_rainbow
  № 5  
Ответить с цитированием
Night_rainbow

Регистрация: Sep 2009
Сообщений: 18
Спасибо. А где можно почитать о том, как его использовать вместо RemoteObject?

Старый 23.09.2009, 18:26
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
http://livedocs.adobe.com/flex/3/lan...onnection.html
Ну собственно, вот...
Т.е. как вы сами понимаете, RemoteObject - это какя-то надцатая оболчка вокруг оболочки оболочки NetConnection.
__________________
Hell is the possibility of sanity

Старый 23.09.2009, 18:53
Night_rainbow вне форума Посмотреть профиль Отправить личное сообщение для Night_rainbow Найти все сообщения от Night_rainbow
  № 7  
Ответить с цитированием
Night_rainbow

Регистрация: Sep 2009
Сообщений: 18
Большое спасибо за указание верного пути!

Код AS3:
public class MyNetConnection extends NetConnection{
    public function MyNetConnection() {
        super();
        var res:Responder = new Responder(onResult,onFault);
 
        connect("http://localhost:8080/flexapp/springwraper/messagebroker/amf");
        call("flexuserDaoService.getAllFlexUsers",res);
    }
 
 
protected function onResult(result:Object):void{
   trace("");
}
 
    protected function onFault(result:Object):void{
        trace("");
}
}
}
Вот так отлично работает! Осталось все это красиво оформить только...

Добавлено через 33 минуты
Хочу уточнить... Подскажите, пожалуйста. Метод connect() по спецификации:
Цитата:
Creates a bidirectional connection between a Flash Player or AIR application and a Flash Media Server application
Меня интересует вопрос, нужно ли его закрывать?
К примеру, есть приложение. К примеру, за все время жизни приложения оно будет использовать NetConnection объект, вызывая метод getAllFlexUsers:

Код AS3:
public class MyNetConnection extends NetConnection{
    private static var instance:MyNetConnection = new MyNetConnection();
    public function MyNetConnection() {
        super();
        var res:Responder = new Responder(onResult,onFault);
 
        connect("http://ausatov:8080/flexapp/springwraper/messagebroker/amf");
 
    }
 
    public function getAllFlexUsers(responder:Responder):void{
        instance.call("flexuserDaoService.getAllFlexUsers",responder);
    }
 
protected function onResult(result:Object):void{
   trace("");
}
 
    protected function onFault(result:Object):void{
        trace("");
}
}
}
Это нормально - постоянно держать соединение открытым? К примеру, таких объектов-синглтонов может быть очень много. У каждого будут свои вызовы... Хорошо ли это? Просто не хочется все методы пихать в один класс, хочется разделить на отдельные *.as файлы

Создать новую тему Ответ Часовой пояс GMT +4, время: 09:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 09:29.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.