Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Аналог функции eval() в php (http://www.flasher.ru/forum/showthread.php?t=92354)

asuri 22.02.2007 18:50

Аналог функции eval() в php
 
Всем привет.
Есть задача следующего рода:
с сервера присылается некий текст и служебная информация, в зависимости от которой, текст должен отображаться в разных компонентах (textaria, TextInput, label и т.д.)
Допустим в некоторый момент времени я решу написать ещё какой то свой компонент и захочу чтоб текст отображался в нём. Так вот вопрос, как бы мне сделать так, что бы при этом не надо было перекомпиливать весь проект.

Вот в PHP например есть функция eval(), которая принимает на входе произвольный код и исполняет его. Есть ли что то похожее во флексе?

если нет, то можно ли компилить компоненты в отдельные swf-ники, а потом подключать в основном аппликейшене???

Помогите плиз найти рациональное решение.

Nirth 23.02.2007 03:18

Написать рантайм компилятор.

Скрипун 23.02.2007 09:45

ответ нет. eval () тут очень упрощенная и это делать не умеет.

asuri 23.02.2007 21:06

Я решил делать так:передавать типа компонента в функцию, там его создавать , задавать ему всякие свойства и потом уже делать addchild() в какой нить hbox или vbox. Тока у меня опять не всё получается

Код:

...
public function CreateComponent(c_type:String):Object{
        var Component:Object;
        if(c_type=='TextInput'){
                Component=new TextInput();
        }else if(c_type=='TextArea'){
                Component=new TextArea();
        }else if(c_type=='RichTextEditor'){
                Component=new RichTextEditor();
        }
        return Component;
}
...
hBox_1.addChild(CreateComponent('TextInput'));
...

пишет ошибку 1118: Implicit coercion of a value with static type Object to a possibly unrelated type flash.display:DisplayObject.

etc 23.02.2007 21:08

Дык, напиши в типе возврата DisplayObject

asuri 23.02.2007 21:21

а я написал по другому
hBox.addChild(DisplayObject(CreateComponent('TextInput')));
Так не правильно?

etc 23.02.2007 21:38

А что, написать правильный тип возврата сложнее было? Кастить зачем? Они и так наследуются от DisplayObject, зачем кастить лишний раз…

Только уж тогда
Код:

public function createComponent(componentType:String):DisplayObject {
        switch (componentType) {
                case 'TextInput':
                return new TextInput();
                break;
                case 'TextArea':
                return new TextArea();
                break;
                case 'RichTextEditor':
                return new RichTextEditor();
                break;
                default:
                return null;
        }
}

з.Ы. С прописной буквы именуются классы, а не методы и переменные.

__i 23.02.2007 23:20

гы гы шлабаки, никакоего изврата( настоящий изврат:
Код:

private var classes : Object = {'TextInput' : TextInput,
                                        'TextArea' : TextArea }

public function createComponent(componentType:String):DisplayObject
{
if (classes[componentType]!=null)
        {
                  return new classes[componentType]();
        }
        else
        {
                //'ТУТ ВСЕРАВНО НЕЛЬЗЯ НУЛ возвращать ) т.к. нул не аттачиться )';
                return null;
        }
}


etc 23.02.2007 23:22

Ну пусть new Shape хотя б…

Nirth 23.02.2007 23:26

Не нужно ничего возвращать, перед return надо написть throw new Error('No Such Class');
ибо в mx.core.Contaiener можно дабавлять только IUIComponent(контейнер должен уметь алайнить компоненты, в IUIComponent заложено это) а плодить лишние IUIComponent'ы это издевательство над оперативкой.


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

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