Javascript передает массив объектов вместо массива массивов - PullRequest
1 голос
/ 13 июля 2010

Я передаю Javascript Array() во Flash через FlashVars, но Flash жалуется.Ребята, можете ли вы указать мне, что я делаю здесь не так?

код JavaScript

// array with the user defined cities
var usercities = new Array( 
    {'nome':"London", 'lat':51.5002, 'long':-0.1262 },
    {'nome':"NYC", 'lat':51.5002, 'long':-0.1262 } 
);

flashvars.newcities = usercities;

флэш-код

// this array is pre-populated so if the users doesn't enter data this is shown
var cities:Array = new Array(
    { nome:"London", lat:51.5002, long:-0.1262 },
    { nome:"NYC", lat:40.7144, long:-74.0060 }
);

// gets FlashVars
var newcities:Object = LoaderInfo(this.root.loaderInfo).parameters.newcities;
if(newcities != null) {
    cities = newcities;
};

не работает.Мне нужно иметь массив cities на стороне Flash точно таким, какой он есть.Со стороны Javascript весь код может меняться.

Спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 13 июля 2010

JavaScript не имеет ассоциативных массивов, как другие языки. Для того, чтобы иметь именованные индексы, вы должны использовать объект. Массив, которому присвоено значение с именованным индексом, будет преобразован в объект.

Для этого вам может понадобиться изменить ваш Flash-код. Как сказал медер, сериализация вашего массива - ваш лучший выбор. Я бы предложил JSON-кодирование в JavaScript и декодирование во Flash.

0 голосов
/ 14 июля 2010

Закончилось передачей значений следующим образом:

Javascript

var cities = new Array( 
    Array("London", 51.5002, -0.1262),
    Array("NYC", 40.7144, -74.0060),
);

Эта вспышка становится чистой строкой.

"London",51.5002,-0.1262,"NYC",40.7144,-74.0060

Затем я взорвал строку и преобразовал в массив. Это немного грязно, но в конце концов работает. Пока в массиве всегда есть 3 элемента в строке и ни один элемент не имеет запятой.

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 13 июля 2010

Ну, вы можете просто вручную сделать их массивами.Примерно так:

var usercities = [];
usercities[0] = [];
usercities[0]["nome"] = "London";
usercities[0]["lat"] = 51.5002
usercities[0]["long"] = -0.1262
usercities[1] = [];
usercities[1]["nome"] = "NYC";
usercities[1]["lat"] = 51.5002
usercities[1]["long"] = -0.1262

Хотя я думаю, что это все то же самое, но вспышка может видеть это по-другому.

...