Передача геттера или хитрый указатель в AS3

Итак, я знаю, что as3 не имеет указателей, но я подумал, что может быть способ использовать объектные переменные в качестве указателей.

Прямо сейчас я полагаюсь на передачу функции, которая получает функцию get, это не очень элегантное решение, например:

myvar = function():int{return objectName.getVarValue};

Другим вариантом было бы изменить все методы gets и set на функции get и set или добавить их в дополнение к. Я также мог бы создать класс связывания, который просто хранит имя, но это просто большая головная боль.

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


По сути, в нем участвуют три стороны, почти как в MVC. Один объект - это контроллер, который сообщает, какое значение «представления» должно соответствовать любому ключу данных. Представление довольно глупое, как и данные/модель, поэтому все делается через контроллер и в последовательности, в которой эти события перекрываются. Итак, я делегирую сбор данных ключу данных, определяя в начале все различные параметры, а позже я могу просто вызвать обновление и выбрать ключи данных, и они захватят данные. прямо сейчас у меня есть конструктор, связанный со значением через функцию, которую я создаю следующим образом

onUpdate:function():int{return objectName.getVarValue};

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

Я бы хотел, чтобы as3 мог просто делать указатели, может быть, в as4? Я подумал, что может быть способ получить геттер как функцию, о которой я не знал.


person Daniel    schedule 30.01.2010    source источник
comment
Можете ли вы добавить к своему примеру, что вам нужно делать с myVar? Вы передаете его другой функции или конструктору, чтобы этот объект мог позже косвенно получить доступ к геттеру?   -  person AaronLS    schedule 30.01.2010
comment
мой плохой, я добавил больше информации сейчас.   -  person Daniel    schedule 30.01.2010


Ответы (3)


Я бы просто передал сам объект, так как ссылка ведет себя как указатель. Вы можете создать собственную привязку данных, используя динамические свойства. Когда вы хотите связать представление с моделью данных, контроллер создает привязку данных к объекту источника данных, а также имя свойства для привязки к источнику данных и имя свойства для привязки к представлению:

view.AddBinding(dataObjectName, "somePropertyOnObject", "propertyNameOnView");

Вы можете хранить их в каком-то созданном вами классе Binding, и при каждом вызове AddBinding вы добавляете его в коллекцию, вероятно, следя за тем, чтобы для данного «propertyNameOnView» не существовало дубликатов. Когда вам нужно отреагировать на событие обновления свойства в объекте данных, вы делаете назначение, как показано ниже, за исключением того, что вы берете строки из своего объекта Binding, возможно, перебирая всю коллекцию Bindings, чтобы выполнить полное обновление вид:

this["propertyNameOnView"] = dataObjectName["somePropertyOnObject"];

Но больше похоже на это с объектом привязки:

someBinding.DestinationObject[someBinding.DestinationProperty] = 
  someBinding.DataSource[someBinding.SourceProperty];

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

Это небольшая информация о динамических свойствах для начала, если вы с ними не знакомы: http://www.colettas.org/?p=17

person AaronLS    schedule 01.02.2010

Почему бы просто не ударить объект по стоимости? Зачем нужно хранить в другой переменной, если вы не хотите конкретное значение в определенное время?

person Brent    schedule 30.01.2010

способ получить актуальные значения переменной объекта - Даниэль

Не совсем понятно, чего вы хотите добиться. Может быть, вы можете объяснить, почему простое выполнение этого не соответствует вашим требованиям?

myvar = return objectName.getVarValue;
person AaronLS    schedule 30.01.2010