Is not same. i need to break in each point.
someObject['person.address.phone.something']['property'] = 5 will generate { 'person.address.phone.something': { 'property': 5 } } using eval will generate { person: { address: { phone: { something: { property: 5 } } } } } this is the diference. On 11 jun, 17:23, kangax <[EMAIL PROTECTED]> wrote: > In this case, iterating twice simply removes duplication. The method > itself is barely performance "critical" (few item collections with not > too "heavy" calculations). Not repeating yourself is, imo, critical. > As far as "eval" goes, you seem to be confused about property access: > > eval("result." + tree + "." + processkey + ".push(value)"); > // is "same" as > result[tree][processkey].push(value); > > - kangax > > On Jun 11, 3:56 pm, TAOS <[EMAIL PROTECTED]> wrote: > > > 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 -~----------~----~----~----~------~----~------~--~---