Вопрос

Я работаю с fla, файлом as (класс документа) и файлом jsfl. SWF генерируется в папке WindowSWF (например, $ flash / WindowSWF)

У меня есть простой windowSWF, и я использую MMExecute и fl.runScript для передачи переменных из as3 в jsfl. Я не предполагал, что у меня будут проблемы, если я буду использовать объекты.

В моем windowSWF у меня есть DataGrid с именем settingsGrid со следующими столбцами: [& Quot; Префикс & Quot;, & Quot; суффикс & Quot;, & Quot; тип & Quot;] и я пытаюсь передать settingsGrid.dataProvider.toArray () в сценарий jsfl.

Проблема в том, что с другой стороны он не определен. Любые намеки на то, как я могу обойти это?

Краткая версия: как передать массив объектов, таких как {префикс: " значение " суффикс: " значение " тип: " значение "}, из Actionscript в jsfl. Передача отдельных объектов работает, я получаю сообщение об ошибке при передаче массива:

"Syntax Error: missing ] after element list"

Мой вызов функции выглядит следующим образом:

MMExecute('fl.runScript(fl.configURI + "Commands/LazyGen.jsfl","generate","_",'+ settingsGrid.dataProvider.toArray() +');');

и подпись для метода в файле jsfl выглядит следующим образом:

function generate(prefixArg,settingsArg){}
Это было полезно?

Решение

Я передаю объекты из таблицы данных в JSFL. Объекты имеют следующие свойства: ключ , замена и тип . Вот функция, которую я использовал для создания строки, которую я мог передать в JSFL из actionscript:

private function dataProviderToString(dataProvider:DataProvider):String{
            var settingsString:String = '[';
            for(var i:int = 0 ; i < dataProvider.length ; i++){
                if(i < (dataProvider.length-1)) settingsString += '{key:"'+ dataProvider.getItemAt(i).key + '",replacement:"' + dataProvider.getItemAt(i).replacement + '",type:"'+ dataProvider.getItemAt(i).type + '"},';
                else settingsString += '{key:"'+ dataProvider.getItemAt(i).key + '",replacement:"' + dataProvider.getItemAt(i).replacement + '",type:"'+ dataProvider.getItemAt(i).type + '"}';
            }
            settingsString += ']';
            return settingsString;
        }

Я заметил, что настройки в SWF не были каким-то волшебным образом сохранены, поэтому я использовал локальный SharedObject для сохранения настроек из dataProvider. Думаю, я мог бы просто написать файл с использованием FLfile, но я не хотел продолжать преобразовывать массивы в строки и обратно. Я записываю массив dataProvider (dataProvider.toArray ()) в ByteArray, который я просто читаю и вставляю в конструктор нового DataProvider, когда мне это нужно.

Другие советы

Просто определите значение переменных внутри вашего windowsSWF и передайте переменные в JSFL с помощью команды MMExecute.

Следующая команда устанавливает черный цвет заливки на панели инструментов. Так, например, значение цвета может быть получено из компонента выбора цвета и затем передано в jsfl. Все, что я делаю, это объединяю переменную из сценария действия в строку, которая отправляется через MMExecute.

var myColor:String = "#000000";
MMExecute("var fill = fl.getDocumentDOM().getCustomFill(\"toolbar\");fill.style= \"solid\";fill.color = \'"+myColor+"\';fl.getDocumentDOM().setCustomFill( fill );");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top