I'd pass an actual class to registerType instead of a string, than you could do something like (I stripped the unused stuff):

(in case the inline code didn't work: http://pastie.textmate.org/private/8sirah0pp7xvgtbtas1eq )

Sgd.Ui.Factory = new Class({

    initialize: function(){
        this.list = new Hash();
    },

    registerType: function(type, klass){
        this.list.set(type, klass);
    },

    get: function(options){
if (options.type == undefined || ! this.list.has(options.type)) return null;
        return new this.list.get(options.type)(options);
    }
});

Sgd.Ui.Factory.registerType('html', Request.HTML);

Sgd.Ui.Factory.get('html', someOptions);


On Oct 28, 2008, at 20:10, jonlb wrote:


Hi,

I was wondering if anyone could give me a better way to write the
below class?  I'm guessing you will be able to tell the intent from
the code...

<code>
Sgd.Ui.Factory = new Class({

        Implements: [Events, Options],

        options:{},

        list: null,

        initialize: function(options){
                this.setOptions(options);
                this.list = new Hash();
        },

        registerType: function(type,klass){
                this.list.set(type,klass);
        },

        get: function(options){
                if ($defined(options.type) && this.list.has(options.type)) {
                        klass = this.list.get(options.type);
                        str = 'new '+klass+'('+JSON.encode(options)+')';
                        obj = eval(str);
                       return obj;
                } else {
                        return null;
                }
        }
});

</code>

Thanks in advance for any help!

jonlb

--
twitter/blog: http://kassens.net

Reply via email to