Как я могу получить доступ к свойствам класса, которые импортируются в функцию?

Я пытаюсь объявить переменную класса в функции и получить доступ к ее свойствам в другой функции, но получаю ошибку 1120. Вот мой код:

// function content
if (components == "settings")
{
    import DialogComponentsSettings;
    var dialogComponentsSettings:DialogComponentsSettings = new DialogComponentsSettings();
    addChild(dialogComponentsSettings);
    dialogComponentsSettings.init();
    back_mc.addChild(dialogComponentsSettings.settings_mc);

    dialogComponentsSettings.okBtn.addEventListener(MouseEvent.CLICK, onOkClick);
    dialogComponentsSettings.cancelBtn.addEventListener(MouseEvent.CLICK, onCancelClick);
}

private function onOkClick(e:MouseEvent):void
{
    var arr:Array = new Array();
    arr[0] = e.target.name;
    arr[1] = dialogComponentsSettings.cb.selected;
    arr[2] = dialogComponentsSettings.ns.value;
    arr[3] = dialogComponentsSettings.ta.text;
    dispatchEvent(new CustomEvent(CustomEvent.PASS_PARAMS, arr));
}

Это дает мне ошибку:

... \PopupDialog.as, строка 129, столбец 13 1120: Доступ к неопределенному свойству dialogComponentsSettings.

Как я могу это исправить?


person nikel    schedule 24.04.2015    source источник
comment
Можете ли вы попытаться собрать пример на wonderfl.net?   -  person Phil Walton    schedule 24.04.2015


Ответы (1)


Ваша переменная dialogComponentsSettings является локальной переменной этой функции. Он неизвестен вне этой функции. Вот почему вы получаете ошибку.

Вы должны объявить переменную вне функции. Таким образом, он доступен и в других функциях.

Размещение import в блоке if не имеет особого смысла: условие if оценивается во время выполнения, оператор импорта во время компиляции.

Всегда размещайте импорт в начале кода. Это проясняет, какие операции импорта используются, и избавляет других разработчиков, пытающихся прочитать ваш код, от необходимости находить глубоко вложенные импорты, спрятанные где-то в вашем коде.

person null    schedule 24.04.2015
comment
но если создать много локальных переменных вне функции, не останутся ли они в памяти? - person nikel; 24.04.2015
comment
Я не хочу создавать много переменных вне функций. Вот почему я использую отдельные файлы классов. - person nikel; 24.04.2015
comment
@nikel да, точно, вам нужна только одна переменная: dialogComponentsSettings, класс группирует все, что есть в этом диалоговом окне, в один объект, и вам нужна только одна переменная для ссылки на него. Вам не нужны отдельные переменные для кнопки «ОК» и «Отмена», потому что вы можете ссылаться на них через объект, как вы это уже делали. Конечно, вы хотите, чтобы объект оставался в памяти. Ведь вы хотите показать это! - person null; 24.04.2015
comment
Если вы хотите использовать какие-либо объекты, они должны быть в памяти, если вам не нужен объект в памяти, вы не сможете его использовать нигде. - person BotMaster; 24.04.2015