I try to use the prototype form method called serializeElements, to
get all elements in form and build a JSON var.
It work, but not in the best way.
It method get all fields in a form and build a JSON, but it dont put
JSON inside JSON.
Example:

If i have the follow form:

input name="person.name"
input name="person.age"
input name="person.address.street"

The serializeElements's method build a JSON like this

{ "person.name": "??", "person.age": "??", "person.address.street":
"??" }

With my modified method the JSON will be generated like this

{ name: "??", age: "??", address: { street: "??" } }
Or
{ car: { name: "??", age: "??", address: { street: "??" } } }

What are you think about this method?

Can i add this method in prototype framework? How?

/**
 * Serialize a form into a JSON var
 *
 * How to use:
 *
 * var json = formToJSON('form_test', { prefix : 'car.', exclude:
['description'] } );
 *
 * <form id="form_test">
 *      <input type="text" name="car.id" value="2" />
 *  <input type="text" name="car.name" value="Z5" />
 *  <input type="text" name="car.description" value="Sport car" />
 *  <select name="car.company.id">
 *       <option value="1" selected="selected">BMW</value>
 *       <option value="2">Mercedes</value>
 *      </select>
 *  <input type="checkbox" name="car.optionals" value="carsound"
checked="checked">Car Sound
 *  <input type="checkbox" name="car.optionals" value="gps">GPS
 *  <input type="checkbox" name="car.optionals" value="absbreak"
checked="checked">ABS Break
 * </form>
 *
 * The example above will generate the folow JSON.
 *
 * { id: '2', name: 'Z5', company: { id: 1 }, optionals: ['carsound',
'absbreak'] }
 */
function formToJSON(form, options) {
        elements = $(form).getElements();
        if (typeof options != 'object') options = { hash: !!options };
        else if (Object.isUndefined(options.hash)) options.hash = true;
        var key, value, submitted = false, submit = options.submit;

        var data = elements.inject({ }, function(result, element) {
                if (!element.disabled && element.name) {
                key = element.name;
                value = $(element).getValue();
                if (value != null && (element.type != 'submit' || (!submitted &&
                        submit !== false && (!submit || key == submit) && 
(submitted
= true)))) {

                        key = ( !Object.isUndefined(options.prefix) ) ?
key.replace(options.prefix,"") : key;

                        if( Object.isArray(options.exclude) )
                                if( options.exclude.indexOf(key) != -1 )
                                        return result;

                        if( key.indexOf(".") != -1 ) {
                                var processkey = key;
                                var tree = "";
                                while( processkey.indexOf(".") != -1 ) {
                                        var newkey = processkey.substring( 0,
processkey.indexOf(".") );
                                        processkey = processkey.replace( newkey 
+ ".", "" );

                                        tree += (tree == "") ? newkey : "." + 
newkey;

                                        if( eval("result." + tree) == undefined 
||
eval("result." + tree) == null )
                                                eval("result." + tree + " = new 
Object()") ;

                                                if( processkey.indexOf(".") == 
-1 )
                                                        if( processkey in eval( 
"result." + tree ) ) {
                                                                if ( 
!Object.isArray( eval( "result." + tree + "." +
processkey ) ) )
                                                                        
eval("result." + tree + "." + processkey + " = [ result." +
tree + "." + processkey + "]");

                                                                eval("result." 
+ tree + "." + processkey +
".push(value)");
                                                        } else
                                                        eval("result." + tree + 
"." + processkey + " =
value");
                                }
                        } else
                        if (key in result) {
                        if ( !Object.isArray( result[key] ) )
                                result[key] = [ result[key] ];

                                        result[key].push(value);
                                } else
                                                result[key] = value;
                }
                }

                return result;
        });
        return options.hash ? data : Object.toQueryString(data);
};


thx,
Thiago Antonius
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Spinoffs" group.
To post to this group, send email to rubyonrails-spinoffs@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to