as3 оценивает строку из json как объект

У меня есть объект json, в котором я не знаю некоторых значений во время компиляции, но я знаю, что все объекты будут действительны во время выполнения. Итак, в приведенном ниже примере первая трассировка выводит «50», а я хочу, чтобы вторая трассировка выводила «100», значение someObject.someparam, которое определяется во время выполнения. Это возможно? Спасибо

var plan:Object = { "testParam": 50, "testParam2": "someObject.someParam" }
var someObject:Object = {"someParam": 100}// this actually doesn't get defined until runtime  

trace ("testParam " + plan.testParam);
trace ("testParam2 " + someSortOfInterpreter(plan.testParam2);

person dt1000    schedule 23.06.2011    source источник


Ответы (2)


Для меня это не имеет большого смысла в том, почему вы используете «объект JSON». JSON — это текстовая нотация, которая впоследствии может быть интерпретирована конкретным языком кодирования, который вы используете.

Итак, если ваша строка JSON на самом деле:

var jsonString:String = '{
    "testParam": 50,
    "testParam2": "someObject.someParam"
}';

Вы можете просто полностью исключить свойство testParam во время компиляции, затем проанализировать строку и установить это свойство во время выполнения.

Начните с:

var jsonString:String = '{
    "testParam": 50
}';

тогда:

var plan:Object = JSON.decode (jsonString);
plan.testParam2 = someObject.testParam;

Предполагается, что вы используете класс JSON as3coreLib для декодирования строки json.

person sapptime    schedule 23.06.2011
comment
хм, у нас, кажется, есть разъединение. Я понимаю ваше первое замечание о строке. Но все дело в том, что я ДОЛЖЕН установить testParam2 во время компиляции. Например, во время компиляции мне может понадобиться установить для параметра param2 имя функции. Затем, когда я прочитаю файл json, я буду рассматривать его как функцию, например: jsonString.testParam2(arguments); Но, очевидно, мне нужен какой-то промежуточный шаг. - person dt1000; 24.06.2011

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

var someObject:Object = { }; // Empty object with nothing defined in it

trace(someObject.someParam); // Traces out "undefined"

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

if (someObject.someParam != undefined)

Вы можете установить его, когда захотите

someObject.someParam = 100;

и теперь, после того, как он был установлен, он будет трассировать правильно

trace(someObject.someParam); // Traces out 100

Это то, с чем у вас проблемы? Если нет, возможно, вы могли бы дать нам больше информации о вашей проблеме.

person Flassari    schedule 23.06.2011
comment
изменено и переформулировано здесь, это может решить мою проблему: stackoverflow.com/questions/6461591/as3-function-pointer - person dt1000; 24.06.2011