PDA

Просмотр полной версии : Сохранение значений


Milaho
03.12.2009, 10:53
Добрый день!

Описание задачи: создаю сцену из пяти кадров по типу визарда. На каждом шаге вводятся данные в текстовые поля Input Text и на последнем кадре происходит обработка данных. Есть кнопки "Вперед" и "Назад" двигаясь по которым, необходимо, что бы в заполненных ранее полях сохранялись данные.

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

Проблема: При переходе на первый кадр, массив снова обнуляется и соответственно все данные в нем уничтожаются :(

Какие были приняты меры:
1. При объявлении массива сразу же указывал значения всех элементов. Не помогло.
2. Обнулял массив один раз при onLoad(). Когда второй раз попадаю на первый кадр, то массив просто становится пустой.

Есть ли у кого-нибудь какие-нибудь предложения и идеи??? Сам уже моск сломал...

alexcon314
03.12.2009, 11:10
Не переходите на первый кадр. Сделайте 6 каров, в первом объявите массив, и никогда на него не возвращайтесь.

mooncar
03.12.2009, 11:17
Так пусть на вашем первом кадре функция, которая обнуляет массив, проверяет состояние специального триггера. Например, он устанавливается в true на втором кадре. Когда происходит возврат к первому кадру, то функция массив не обнуляет, но если первый кадр проигрывается первый раз, то значение триггера не определено, и функция должна обнулить массив.
В первом кадре:
function clearArray () {
if (!wasStarted) {
//действия по обнулению массива
}
}
clearArray ();
Во втором кадре:
wasStarted = true ;

Milaho
03.12.2009, 11:19
alexcon314, да, я думал об этом, но это я оставлю на самую безвыходную ситуацию...

alexcon314
03.12.2009, 11:37
mooncar, в первом кадре происходит не просто обнуление массива, а его объявление. Тогда уж как-то так для первого кадра
if(! a)
a = new Array();

mooncar
03.12.2009, 11:48
mooncar, в первом кадре происходит не просто обнуление массива, а его объявление.
Разумеется. Просто все действия для массива я оставил за символами комментариев // на усмотрение автора.

Milaho
03.12.2009, 11:48
mooncar, это тоже не подходит, так как если функция не обнуляет массив, то массив вообще остается пустой, так как на первом кадре он объявляется.
Я думаю, что можно реализовать переприсваивание какого-нибудь временного массива, при переходе со второго кадра, но будет ли виден этот массив из второго в первом кадре?

mooncar
03.12.2009, 11:52
Я думаю, что можно реализовать переприсваивание какого-нибудь временного массива
Не плодите лишних сущностей.
Сделайте как сказал alexcon314 -
if(! a)
a = new Array();
"если массив не задан, то его создаем".

Milaho
03.12.2009, 11:56
Друзья! Спасибо!
Совместными усилиями и мозговой атакой, решили эту проблему!!!!

//Массив, хранящий в себе значения введеных данных, названия соответствуют массиву из ArInputBox
if (!arVarieble){
var arVarieble:Array = new Array(14);
}
//Заполнение массива arVariables нулями
function arVarNull(){
for (var i:Number = 0; i < arVarieble.length; i++) {
if(arVarieble[i]){
arVarieble[i]=arVarieble[i];
}else{
arVarieble[i] = 0; }
}
}
function clearArray () {
if (!wasStarted) {
arVarNull();//действия по обнулению массива
}
}
clearArray ();

// wasStarted присваевается true не на втором кадре, а при клике кнопки "Следующий"

mooncar
03.12.2009, 12:07
Немного смущает
if(arVarieble[i]){
arVarieble[i]=arVarieble[i];
}else{
arVarieble[i] = 0;
}

Почему бы вам не оставить только действия по обнулению:
if(!arVarieble[i]){
arVarieble[i] = 0;
}

Milaho
03.12.2009, 12:10
:D Эхо войны.... Индийский код))) Спасибо!

P.S. Действительно, ужас какой-то)))