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

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

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

Регистрация: Mar 2009
Сообщений: 7
По умолчанию Изменение объекта по ссылке на объект

Добрый день. Сложно даже сформулировать:
Есть объект
Код AS1/AS2:
a:ArrayCollection
Есть функция:
Код AS1/AS2:
myFunction(b:Object):void{
 var c:ArrayCollection = new ArrayCollection();
 b=c;
}
Вызываю
Код AS1/AS2:
myFunction(a);
и разумеется получаю b==c
а хочется a==c
Как?
Спасибо.

P.S.
Пока выкрутился так:

Код AS1/AS2:
myFunction(parent_a:Object,name_a:String):void{
 var c:ArrayCollection = new ArrayCollection();
 if(parent_a.hasOwnProperty(name_a)){
	parent_a[name_a] = c;
	}
}
Вызываю
Код AS1/AS2:
myFunction(a_parent,"a")
Но это как то криво.


Последний раз редактировалось McRain; 27.09.2009 в 19:06.
Старый 27.09.2009, 23:30
chabapok вне форума Посмотреть профиль Отправить личное сообщение для chabapok Найти все сообщения от chabapok
  № 2  
Ответить с цитированием
chabapok

Регистрация: Jul 2009
Сообщений: 240
Записей в блоге: 1
переделать функцию в return new ArrayCollection();

вызывать a=myfunctyion();

Старый 28.09.2009, 00:22
McRain вне форума Посмотреть профиль Отправить личное сообщение для McRain Найти все сообщения от McRain
  № 3  
Ответить с цитированием
McRain
 
Аватар для McRain

Регистрация: Mar 2009
Сообщений: 7
проше тогда сделать
Код AS3:
a = new ArrayCollection();
Разумеется нужна универсальная функция и строка
Код AS3:
var c:ArrayCollection = new ArrayCollection();
просто для примера, там может стоять другой класс (причем разный).
Основной вопрос - как задать значение объекта имея только ссылку на объект?

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS3:
function f(factory:Class):Object { return new factory(); }
Только проблема если у класса есть неизвестное количество аргументов. А вообще - зачем вам это нужно? Может можно вообще по-другому решить?
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 28.09.2009 в 03:31. Причина: Class -> factory
Старый 28.09.2009, 02:36
McRain вне форума Посмотреть профиль Отправить личное сообщение для McRain Найти все сообщения от McRain
  № 5  
Ответить с цитированием
McRain
 
Аватар для McRain

Регистрация: Mar 2009
Сообщений: 7
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Код AS3:
function f(factory:Class):Object { return new Class(); }
Только проблема если у класса есть неизвестное количество аргументов. А вообще - зачем вам это нужно? Может можно вообще по-другому решить?
Спасибо за ответ, не совсем то, что я ожидал, вероятно очень туманно написал , попытаюсь еще:

используется RemoteObject - во время вызова функции передается имя функции, объект, в котором находится функция, и объект, которому присвоится результат.
Надоело каждый раз обрабатывать получение ответа и присваивание
Код AS3:
myObject.myArray = event.result as Array;
Решил убрать лишние функции и сразу в потомок RemoteObject передавать целевой объект и при обработке ResultEvent выполнять присваивание. Сделал было так:
Код AS3:
 var classObject:Class;
classObject = getDefinitionByName( getQualifiedClassName(event.result) ) as Class;
if(classObject!=null){
	destinationObject = event.result as classObject;
}
destinationObject - это и есть ссылка на myObject.myArray , но в таком варианте destinationObject перестает быть ссылкой на myObject.myArray и становится ссылкой на event.result , а мне нужно чтобы значение event.result присвоилось myObject.myArray.

Надеюсь не слишком запутанно..((

Спасибо .

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
destinationObject это не ссылка на myObject.myArray, это ссылка на тот же объект, на который ссылался myObject.myArray до того, как вы ее переназначили. Если чесно, то не вижу, как такая конструкция упростит вашу задачу... возможно немного автоматизирует, но не упростит это точно. Вообще получить ссылку на сеттер нельзя, можно только на метод. Т.е. возможно, в вашем случае проще было бы передавать метод типа myObject.setMyArray
Код AS3:
function f(setter:Function):void
{
    this.setters.push(setter);
}
....
function resultHandler(event:Event):void
{
    for each (var fn:Function in setters)
    {
        fn(event.result);
    }
}
__________________
Hell is the possibility of sanity

Старый 28.09.2009, 04:11
McRain вне форума Посмотреть профиль Отправить личное сообщение для McRain Найти все сообщения от McRain
  № 7  
Ответить с цитированием
McRain
 
Аватар для McRain

Регистрация: Mar 2009
Сообщений: 7
Функции была (и отчасти есть) возможность передавать, меня не устроило что, к примеру, если у моего объекта 20 переменных, то придется писать 40 функции обработки результата (ну или 20 если только обработку успешного получения). А если классов много - это вообще ужас.
Пока что описанный выше способ
Код AS3:
if(parent_a.hasOwnProperty(name_a)){
	parent_a[name_a] = c;
	}
вполне устроил, поскольку при вызове самой функции отправки запроса на сервер( в некотором Gate, в котором и создается RemoteObject) просто указывается строка с именем именно той переменной, значение полученного ответа которой и нужно присвоить.

Код AS3:
public class MyObject{
public var id:int = 0;
	public var targetParam:Array;
	public var secondParam:String;
	public var byteParam:ByteArray;
 
	private function getMyParam():void{
		gate.callRemote(this,"getMyParam","targetParam",resultFunc,faultFunc);
	}
}
так вот раньше приходилось эти самые resultFunc и faultFunc все время писать, где полученный результат присваивался целевому объекту.
теперь же (грубо) можно написать
Код AS3:
gate.callRemote(this,"getMyParam","targetParam",null,null);
и никаких функций больше.
Это существенно сокращает время.
Но это - довольно кривой путь - и суть топика в том, чтобы передавать не строку "targetParam" а сам targetParam.
Однако в RemoteObject, при обработке полученного от сервера ответа, я не могу присвоить targetParam ничего - я не его там вижу, а ссылку на него (или на объект, ссылкой на который он является - не суть важно).
Что ж, оставлю тогда так, как есть, большое спасибо за помощь.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
А сериализовать передаваемые объекты никак не получится?
__________________
Hell is the possibility of sanity

Старый 30.09.2009, 13:45
McRain вне форума Посмотреть профиль Отправить личное сообщение для McRain Найти все сообщения от McRain
  № 9  
Ответить с цитированием
McRain
 
Аватар для McRain

Регистрация: Mar 2009
Сообщений: 7
Что то я не уловил идею.
Объекты сериализованны, но как это поможет изменить исходный объект по имеющейся ссылке?

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну, если объекты сериализованы то при их получении плеер сам инициализирует все свойства, когда будет создавать новый объект нужного типа, т.е. не нужно будет их перебирать и присваивать самому.
__________________
Hell is the possibility of sanity

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

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

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


 


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


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