On Fri, Dec 19, 2008 at 12:33 AM, Juhani Ränkimies <[email protected]> wrote:
>
> I experimented by modifying Base.js:
> - added Record.newPlainClass, Record.newNodeClass, Record.newClass
> - modified Record.newPlainInstance, Record.newNodeInstance and
> Record.newInstance
>
> Quick test with Record.newPlainClass and Record.newPlainInstance worked.

Oops, cannot share rawNode with record instances of the same class.

-juhani


------------------------------
Object.extend(Record, {
        
    newPlainClass: function(spec) {
            return this.newClass(spec, function() {return {};});
    },

    newNodeClass: function(spec) { // backed by a DOM node
            return this.newClass(spec, function() {return
NodeFactory.create("record");});
    },

    newClass: function(spec, optStore) {
        if (arguments.length < 1) throw new Error("call with one or more 
arguments");
        var storeClass;
        var argSpec = {};
        var fieldSpec = {};
        Properties.forEachOwn(spec, function (key, value) {
            fieldSpec[key] = {};
            argSpec[key] = value;
        });
        if (!optStore) {
            storeClass = lively.data.DOMNodeRecord; // FXIME forward reference
            optStore = function() {return NodeFactory.create("record");}; //
FIXME flat JavaScript instead by default?
        } else {
            var tmpStoreInst = optStore(); // This is probably VERY
BAD for DOM records
            storeClass = tmpStoreInst instanceof Global.Node ?
lively.data.DOMNodeRecord : PlainRecord;
        }

        var Rec = storeClass.prototype.create(fieldSpec);
        Rec.addMethods({initialize: function() {
                    this.rawNode = optStore(); // DOM or plain JS Object
                    Properties.forEachOwn(argSpec, function(key, value) {
                            this["set" + key].call(this, value);
                        }, this);
                }});
        return Rec;
    },

    newPlainInstance: function(spec) {
        return this.newInstance(spec, function() {return {};});
    },

    newNodeInstance: function(spec) { // backed by a DOM node
            return this.newInstance(spec, function() {return
NodeFactory.create("record");});
    },

    newInstance: function(spec, optStore) {
        var Rec = this.newClass(spec, optStore);
        return new Rec();
    },

_______________________________________________
General mailing list
[email protected]
http://livelykernel.sunlabs.com/mailman/listinfo/general

Reply via email to