kangax,

why i will iterate something twice? if in a iterate i can do two
things?

Is more easy i use a prefix in my adpted method to works like this $
('form_test').serialize()

of course the method need get better the code, but its is more useful
then the original.


sorry to my bad english.

On 11 jun, 16:12, kangax <[EMAIL PROTECTED]> wrote:
> This looks like an edge case to me ;)
> Prototype.js can accomplish similar conversion quite easily:
>
> Object.toJSON($('someForm').serialize());
>
> Besides that, I don't see a reason to duplicate half of Form#serialize
> in here. Why not simply iterate over a resulting object?
>
> - kangax
>
> On Jun 11, 2: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
--~--~---------~--~----~------------~-------~--~----~
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