PDA

Просмотр полной версии : Функция-таргетинг проблема


ig0r
24.04.2002, 11:15
Привет всем,

Пожалуйста помогите мне справиться со следующей задачей:

У меня есть файл, состоящий из одного кадра. Внем находятся клипы с кнопками, их id имеют цифровые значения. В главный timeline грузятся переменные с теми же id.

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

Написанная мной функция не работает - она делает текстовое поле в главном таймлайне и не загружает значение переменной.

Привожу код:

stop();
var va37 = "test";
function showCaption() {
this.createTextField("mytext", 0, 10, 100, 120, 20);
mytext.multiline = true;
mytext.wordWrap = true;
mytext.border = true;
mytext.background = true;
mytext.variable = "";
myformat = new TextFormat();
myformat.color = 0xff0000;
myformat.bullet = false;
myformat.underline = false;
mytext.text = _root.va+(getProperty(this, _name));
mytext.setTextFormat(myformat);
}


Заранее благодарен за помощь и внимание.

Parafly
25.04.2002, 11:26
mytext.text = _root.va+(getProperty(this, _name));
Как минимум это - не stuff. Eval нужен.
mytext.text = eval("_root.va"+this. _name);

Во-вторых - трабл с путями. trace(this); попробуй.
Насколько мне известно - либо передавай рутовой функции ссылку на вызвавшего, либо саму функцию посели в клипы (что правильнее, потому что больше она никому не нужна).

Assuming:
внутри клипа
function showCaption() {
this.createTextField("mytext", 0, 10, 100, 120, 20);
mytext.text = eval("_root.va"+this._name);
}

Хотя... убей - не пойму, зачем id хранить прям в имени кнопки.

Nox Noctis
25.04.2002, 13:11
Оригинал написал(а) Parafly
либо саму функцию посели в клипы (что правильнее, потому что больше она никому не нужна).
[MX]:
functionName.apply (thisReference, [parameter1, parameter2.....]);

functionName - имя функции
thisReference - ссыла на объект, к которому ее применяем
[parameter1, parameter2.....] - массив параметров функции

внутри самой функции везде пишем 'this' в качестве обращения к объекту

ig0r
25.04.2002, 13:20
Интересно, где мы это пишем? Еще вопрос - как написать функцию, чтобы задать autoSize для текст фиелд (я подозреваю, что это не работает для createTextField)

ig0r
25.04.2002, 13:28
Вот мое нынешнее состояние, работает прекрасно, хотя очень сильно подозреваю, что можно поизящнее... одна беда- autoSize не работает, когда попытался вставить текстовое поле вместо того, чтобы криэйт, чтобы потом форматировать как аutosize, это не работает...

function showCaption(mc) {
mc.createTextField("mytext", 0, 0, 0, 100, 20);
with (mc.mytext) {
multiline = true;
wordWrap = true;
border = true;
background = true;
autoSize = "left";
backgroundColor = 0xFFFFCC;
borderColor = 0x990000;
selectable = "false";
}
var myformat = new TextFormat();
with (myformat) {
color = 0x990000;
font = "_sans";
size ="15";
}
mc.mytext.text = _root[mc._name+"_va"];
mc.mytext.autoSize = "left";
mc.mytext.setTextFormat(myformat);
trace(mc);
}

Parafly
25.04.2002, 13:28
to NoxNoctis:
Эмм... Это, как я понял, макромедийцы сделали макрос на тему либо передавай рутовой функции ссылку на вызвавшего
Типа
_root.myFunc(this._target);

//в руте
function myFunc(targVictim){
with(eval(targVictim)){
this.sometingBad=true;
}
}

Оно?..

Nox Noctis
25.04.2002, 14:42
2Parafly
наверно так и есть... просто зачем городить огород, когда все уже украдено до нас ? ;)))