PDA

Просмотр полной версии : не могу передать переменную в TextField


sector_222
08.02.2009, 22:08
добрый день прошу помощи не могу вывести данные с массива в денамически созданное тест поле


массив kusimus_array[]; заполняется в руте по php запросу - без проблем выводиться в текстовое поле созданное инструментом во FLash

создал клип mcKusimus и уже в нём программно создаю поле


var yy = 50;

var myformat:TextFormat = new TextFormat();
myformat.size = 20;/*размер шрифта*/
myformat.color = 0xFF0000;
var n:String = kusi_array[0];
this.createTextField("kusimus", this.getNextHighestDepth(), 30, yy, 600, 100);/* x, y, W,H */
kusimus.border = true;
kusimus.multiline = true;
kusimus.autoSize = true;
kusimus.wordWrap = true; // перенос слов разрешен
kusimus.type = "dynamic"; //тип текста dynamic input
kusimus.maxChars = 255; //можно ввести только 16 символов

kusimus.text = kusimus_array[0];
kusimus.setTextFormat(myformat);




результат undefined

пробую просто создавать в начале клипа переменную в руте - и вывести - всё норм

подскажите где накосячил?:(

Fatality
08.02.2009, 23:33
Все дело в области видимости переменных. Я так понимаю массив kusimus_array находится в _root, а вы пытаетесь обратится к одному из его элементов из клипа mcKusimus. Варианты решения проблемы:
1. Сделать массив глобальным - var kusimus_array заменить на _global.kusimus_array
2. Обращаться к элементу через _root - kusimus.text = _root.kusimus_array[0];
Первый вариант предпочтительнее.

sector_222
09.02.2009, 00:28
странно - но не помогло хм...я кстати так пробывал - видно в самой функции где обработка данных - косяк
вот она собственно

function Gorizontal(idkey:String,tema:String)
{

Kuest_Button._visible=false;
/*mcKusimusi._visible=false;*/
/*для передачи в функцию Window*/

formData2 = new LoadVars();
//при загрузке флешки в пустое поле выводить сообщение
formData2.onLoad = function(success:Boolean)
{
if (success)
{

//стартовая позиция картинок по X
var startXg:Number = 0;
//стартовая позиция картинок по Y
var startYg:Number = 0;
//дистанция между картинками
var imageShift2:Number = 1;
//текущая координата картинки
var currImageXg:Number = 0;
//создаем контейнер в ScrollPane'e
gorizScroller.contentPath = "ScrollContentGorizont";
/*вносим список id materiala*/
var my_str3:Array = formData2.id_material;
var id_material_array = new Array();
id_material_array = my_str3.split("$$");
/*вносим заголовки тем*/
var my_str4:Array = formData2.heading_material;
var heading_material_array = new Array();
heading_material_array = my_str4.split("$$");
/**********************************вопросы к теме*************************************************/
/*вносим id вопросов*/
var my_st:Array = formData2.id_kus;
var id_kus_array = new Array();
id_kus_array = my_st.split("$$");
/* вносим сами вопросы*/
var my_st1:Array = formData2.kusimus;
_global.kusimus_array = new Array();
kusimus_array = my_st1.split("$$");
/*выводим кнопку если есть вопросы к теме*/
mcKusimusi.ggg = "sdfdsfds";
/*mcKusimusi.kusi_array = kusimus_array;*/
if(kusimus_array[0]!=""){Kuest_Button._visible=true;}
/*hhh.text = kusimus_array[0];*/


/*************************************************************************************************/


for (var i = 0; i<heading_material_array.length-1; i++)
{
//добовляем картинку из библиотеки
gorizScroller.spContentHolder.attachMovie("ttitle","ttitle"+i,i);
//оптимизируем скрипт создавая переменную image передавая ей ссылку на нашу картинку
var ttitle:MovieClip = gorizScroller.spContentHolder["ttitle"+i];
//выставляем координаты токо что созданной картинки
ttitle.vertScroller.spContentHolder.titleText.text = heading_material_array[i];
ttitle.titleText.text = heading_material_array[i];
ttitle._x = startXg;
ttitle._y = startYg;
//выщитываем новую координату для следующей картинки
startXg += ttitle._width+imageShift2;
/*для передачи в функцию Window*/
ttitle.IdKey2_array = id_material_array[i];
ttitle.head_array = heading_material_array[i];
ttitle.temaForWindow = tema;
if (i == 0)/*если первый запрос */
{
MainWindow(tema,heading_material_array[i],id_material_array[i]);
}

}

}else{
ttitle.titleText.text = "Error loading/parsing LoadVars.";
}
};
/*ОТПРАВЛЯЕМ В PHP ID темы */
formData2.keys = idkey;

//отсылаешь в файл .php
formData2.sendAndLoad('phpgorizontal.php', formData2, 'POST');
}

Fatality
09.02.2009, 00:47
Хм... а если попробовать так:
kusimus_array = my_st1.split("$$"); заменить на kusimus_array = my_st1.split("$$").slice();
Да, а вне функции Gorizontal массив виден ?

sector_222
09.02.2009, 01:01
виден: взять даже функцию MainWindow - в ней поменял вместо темы вставил массив kusimus_array- всё показывает
я думаю тут что-то с этим мувиклипом mcKusimus- это он почемуто- не видит этот массив именно с этой функции - поскольку с других мест перменные этот клип видит

Fatality
09.02.2009, 01:08
Странно, попробуйте создавать глобальный массив вне функций, а в функции задавать ему значение.

sector_222
09.02.2009, 01:10
ща прпробую - у меня такой вопрос: как вывести несколько таких текстовых полей в один мувик одним циклом - из массива значит ? аттачем?

Fatality
09.02.2009, 01:29
Нет, аттач тут безполезен, просто создайте через цикл необходимое количество полей:
for(i=0; i < kusimus_array.length; i++)
{
var kusimus = this.createTextField("kusimus"+i, this.getNextHighestDepth(), 30, yy+100*i, 600, 100);/* x, y, W,H */
kusimus.border = true;
kusimus.multiline = true;
kusimus.autoSize = true;
kusimus.wordWrap = true; // перенос слов разрешен
kusimus.type = "dynamic"; //тип текста dynamic input
kusimus.maxChars = 255; //можно ввести только 16 символов

kusimus.text = kusimus_array[i];
kusimus.setTextFormat(myformat);
}

sector_222
09.02.2009, 01:34
чё-то не идёт .......- что-то переделать придётся - а за цикл спасибо - обязательно применю =)

Добавлено через 10 часов 31 минуту
:wacko: тупо код перенёс из мувика в рут - всё заработало

теперь появилас новая проблема - как отчистить мувик от этих строк??? - поскольку при повторном вызове функции всё печатаеться поверх напечатанного - та же проблема и с вывродом изображения - не знаю как выгружать его из мувика -( загружал с помощью loadMovie)

Fatality
09.02.2009, 13:09
Выгружай с помощью, unloadMovie()

sector_222
09.02.2009, 22:24
ясно - спасибо -
в хелпе нашёл removeTextField(); так мне нужно несколько полей и всегда количесвто разное а именя у них ks0,ks1, ks2, ит д
цикл такого рода не работатет как быть
if(del_kus >0)
{
for(j=0; j < del_kus; j++)
{
_root.mcK."ks"+j.removeTextField();
}
}

Fatality
09.02.2009, 22:41
Ну, во-первых, не ясно чему равна переменная del_kus, во-вторых, есть же цикл for..in.
for(txt in _root.mcK)
{
if(_root.mcK[txt] instaceof TextField) _root.mcK[txt].removeTextField();
}
Удалит все текстовые поля в клипе mcK.

sector_222
09.02.2009, 23:38
del_kus- это число созданных ранее полей которые хочу удалить

а теперь можно поподробней:
у меня в _root.mcK - созданы поля ks0,ks1 и тд
как удалить?

что такое txt это что какая то переменная?
а instaceof -?

Fatality
10.02.2009, 00:15
Цикл for..in проходит по всем свойствам объекта, а так как в AS все вложенные клипы(текстовые поля, кнопки и т.п), являются свойствами родителя, мы можем использовать данный цикл применительно к ним. txt - это переменная, как i в обычном цикле, она содержит в себе текущее свойство. Оператор insctanceof проверят левый операнд на принадлежность к классу указанном в правом, в нашем случае, проверяет, является ли текущий дочерний элемент mcK текстовым полем и если да, то удаляет его.

dimarik
10.02.2009, 00:42
Тряхнем стариной (http://www.sharedfont.com/liveDocs/Help/ActionScriptLangRef/00001371.html) =)

sector_222
10.02.2009, 01:05
в таком виде не работает- пишет что
в строке
if(_root.mcK[txt] instaceof TextField) _root.mcK[txt].removeTextField();

пропущен знак ')'

dimarik
10.02.2009, 01:12
исправьте на instanceof (пропустили букву "n"). instance (http://lingvo.yandex.ru/en?CardId=SaW5zdGFuY2U,;L0F) на lingvo.yandex.ru

sector_222
10.02.2009, 01:40
теперь всё встало на свои места - СПАСИБО =)!!!!