Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   как удалить TextInput при focusOut - получаю критическую ошибку (http://www.flasher.ru/forum/showthread.php?t=88473)

dacino 24.11.2006 01:33

как удалить TextInput при focusOut - получаю критическую ошибку
 
есть такой извратный кусок кода класса-потомка MovieClip, вызывающий критическую ошибку плеера:
Код:

import mx.utils.Delegate;
iLab = createClassObject(Label,"iLab"+depth, depth, {_x:0, _y:0, text:"12", autoSize:"left", visible:true});
                iLab.onRelease = function(){                       
                        this.visible = false;
                        var iEdit:TextInput = _parent.createClassObject(TextInput,"iEdit"+depth+1, depth+1, {_x:this._x, _y:this._y, text:"12", _width:this._width+5, visible:true});
                        var destr:Function = Delegate.create(this, edLab);
                        function remm(){
                                destr(iEdit);
                        }
                        iEdit.addEventListener("focusOut", remm); //при наступлении этого события
 //происходит ошибка вырубающая флешовый плеер,
 //насколько я понял объект вызвавший неродное событие таким образом грохнуть нельзя
 //мув при onRelease можно удалить                       
                }
                function edLab(edit:TextInput){
                        this.visible = true;//depth был неправильный
                        this.text = edit.text;
                        edit._parent.destroyObject(edit._name);
                }

конечно можно удалять етот iEdit onRelease другого клипа, но так поступать нехочется, дабы не жертвовать универсальностью кода и гимора это принесет немало(чую обратной стороной стула), можно оставить как есть: edit.visible=false, но для чистоты эксперемента охота его всетаки удалить...
дык, товарищи флешеры:
1: в чем я неправ удаляя так объект,
2: может есть другое решение,
3: и в чем причина критической ошибки плеера(понимаю, что в моем коде, а именно -...)?
заранее дьякую, и извеняйте за объемность вопроса

etc 24.11.2006 02:29

dacino, как ты думаешь, если я вставлю твой код для проверки, у меня будет что-то работать? Судя по написанному, стоит для начала понять, что делает Delegate, EventDispatcher, что такое методы, конструктор супер-класса и прочее. Пока видно только то, что знания есть только обрывками и всё свалено в кучу.

Вердикт: переписать должным образом.

dacino 24.11.2006 11:14

__etc - внимая вашему вердикту переписал вопрос, чтоб код работал, требо чтоб в либаре были Label и TextInput, соответственно

etc 24.11.2006 13:54

Не работает:
Код:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 5: The class or interface 'TextInput' could not be loaded.
                            var iEdit:TextInput = _parent.createClassObject(TextInput,"iEdit"+depth+1, depth+1, {_x:this._x, _y:this._y, text:"12", _width:this._width+5, visible:true});

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 15: The class or interface 'TextInput' could not be loaded.
                    function edLab(edit:TextInput){

Total ActionScript Errors: 2          Reported Errors: 2


etc 24.11.2006 14:11

Код:

depth = 0;
iLab = createClassObject(mx.controls.Label, "iLab"+depth, depth, {_x:0, _y:0, text:"12", autoSize:"left", visible:true});
iLab.onRelease = function() {
        this.visible = false;
        this.iEdit = this._parent.createClassObject(mx.controls.TextInput, "iEdit"+(depth+1), depth+1, {_x:this._x, _y:this._y, text:"12", _width:this._width+5, visible:true});
        this.iEdit.text = this.text;
        this.iEdit.addEventListener("focusOut", mx.utils.Delegate.create(this,this.onEditComplete));
};
iLab.onEditComplete = function() {
        if (this.iEdit.text!=undefined) {
                this.text = this.iEdit.text;
                this._parent.destroyObject(this.iEdit._name);
                this.visible = true;
        }
}


dacino 24.11.2006 17:01

сто раз сорри, вырванный код не работает, вот архив с исходником, и классом delegate, если у кого нет mx.utils.delegate, в либеру проекта положите TextInput и Label, как сделать грамотное удаление TextInput, при focusOut не представляю, хотя очень интересно...

etc 24.11.2006 17:09

dacino, посмотри пост #5, там всё прекрасно работает.

etc 24.11.2006 17:11

И ещё, замени свой McFactory на этот:
Код:

/**
 * @author Denis Kolyako
 */
class ru.etcs.McFactory {
       
    public static function create (this_mc:MovieClip, name:String, depth:Number, init_obj:Object, current_constructor:Function):MovieClip {
        var new_mc:MovieClip = this_mc.createEmptyMovieClip(name, depth);
        new_mc.__proto__ =  current_constructor.prototype;
        for (var i:String in init_obj) {
                new_mc[i] = init_obj[i];
        }
        current_constructor.call(new_mc);
        return new_mc;
    }
}

У тебя с ошибкой просто.

dacino 24.11.2006 17:25

__etc - как хорошо, что у некоторых людей есть практически телепатические способности, мои вам благодарности...


Часовой пояс GMT +4, время: 18:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.