Передача объекта из flex в javascript

Я хочу вызвать метод во flex со стороны javascript,

так что я могу получить объект javascript, который содержит данные в flex.

теперь я пытаюсь как

var result:Object = new Object()
var keyset:Array = data.getKeySet();

for (var i:int = 0 ; i < keyset.length ; i++) {
    result[keyset[i]] = data.get(keyset[i]);
}

return result;

но это не работает. как я могу сделать это правильно?

p.s. Я знаю, что это фундаментальный вопрос, но я ничего не нашел, хотя гуглил целый час. Пожалуйста, помогите!


person Daehee Han    schedule 22.10.2012    source источник


Ответы (2)


Я считаю, что вы не можете напрямую вызывать метод в AS3 из JS (и наоборот). Однако для этого должен быть интерфейс, где один может вызывать другой. Если я правильно помню, вы должны использовать ExternalInterface API .

Кроме того, вы не можете передавать объекты Flex в JS (и наоборот). Попробуйте создать универсальный объект, сериализуемый в JSON, и используйте эти сериализованные данные для передачи данных друг другу. Принимающая сторона может разобрать его обратно, чтобы использовать данные. В этом примере код передал строку с JS на AS3.

В вашем случае функция Flex будет:

  • построить объект
  • заполнить его данными
  • сериализовать его в строку JSON
  • вернуть строку вызывающей стороне

Затем, когда JS вызывает функцию:

  • JS получает строку
  • Используйте JSON.parse() для преобразования строки JSON в объект JS.
  • использовать объект
person Joseph    schedule 22.10.2012

Для связи между Flash/Flex и JS на странице используйте класс ExternalInterface. Вы не можете напрямую передавать объекты, но вы можете преобразовать свой объект в сериализуемый/строку. Вот как можно вызвать функцию myFunc и задать ей два аргумента, строку и число:

ExternalInterface.call('myFunc',1,'aString');

После имени функции, которое всегда должно быть строкой, следует параметр ...rest. Проще говоря, это означает, что вы можете передать функции любое количество аргументов, разделяя их запятыми (здесь мы делаем два аргумента).

Если вы использовали AS2 в какой-либо момент в прошлом, вы, возможно, знаете функцию «eval», она была унаследована от (и, таким образом, до сих пор используется) JS — она анализирует строку и пытается разобрать ее в JavaScript, используя это, вы можете буквально отправить код Javascript вместо func/args:

ExternalInterface.call('alert("Hello!")');

Если вам нужна двусторонняя связь, используйте функцию ExternalInterface.addCallBack, чтобы зарегистрировать функцию как вызываемую из JS.

В случае возникновения ошибок при этом может потребоваться корректировка кода встраивания: «В теге объекта для SWF-файла на содержащей его HTML-странице установите следующий параметр:

имя параметра = "allowScriptAccess" значение = "всегда"

person MickMalone1983    schedule 22.10.2012