Wow, first of all, lose the eval()'s.

You don't need to dynamically construct a call to eval() to resolve a
property.  Instead of:

eval("someObject." + someProperty)

You should say:

someObject[someProperty]

And this is, of course, chainable:

a[property1][property2]

-Fred

On Wed, Jun 11, 2008 at 1:01 PM, TAOS <[EMAIL PROTECTED]> wrote:

>
> 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
> >
>


-- 
Science answers questions; philosophy questions answers.

--~--~---------~--~----~------------~-------~--~----~
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