2012-04-08 19 views
5

Todas las preguntas que he hecho en las tablas no responden realmente a una pregunta que tengo. Entonces les preguntaré a los expertos aquí. Primero, muchas gracias por seguir leyendo. Realmente aprecio de lo que se trata Stackoverflow, espero poder contribuir ahora que soy miembro.Crear JSON desde jQuery cada bucle

Quiero crear dinámicamente un objeto JSON basado en variables establecidas desde otro objeto JSON desde con jQuery cada ciclo. Creo que mi sintaxis y, probablemente, mi conocimiento de estas cosas están un poco fuera de lugar.

me gustaría terminar con la siguiente estructura JSON:

{ 
    desktop:{ 
    title:300, 
    rev:200 
    } 
} 

Donde "escritorio" es un valor de otro objeto JSON no en este bucle, puedo llamar a que no hay problema, de hecho, es en realidad, el valor del nombre que establecí en el otro objeto JSON. Estoy recorriendo una matriz en el objeto llamado columnas pero quiero establecer un objeto separado que contenga todos los anchos porque las columnas son ajustables y accesibles a través de otro marco al que lo presionaré, quiero conservar esos anchos.

yo estaba tratando de hacerlo desde dentro del bucle:

var colWidths = {}; 
$.each(columns, function(i) { 
    colWidths.desktop.title = columns[i].width; 
}); 

puedo alertar columnas [i] .width éxito. El problema que tengo es crear y acceder a esto. Parece que todo lo que hago parece correcto, pero este no es el caso. Tal vez es mi o mi configuración? ¿Podría mostrarme cómo codificar esto correctamente? O podría crear un objeto Javascript si esto no es posible. ¡Gracias por adelantado!

+0

¿En realidad se trata de crear el texto JSON? Me parece que solo estás creando un objeto de JavaScript. –

Respuesta

3

Bienvenido a Stackoverflow. No escribió ningún mensaje de error que recibió, por lo que asumo lo siguiente.

// prepare the object correctly first 
var colWidths = { 
    desktop: { 
     title: 0 
    } 
}; 
// then ADDING each value with += instead of = 
// (because in your code you will just have the last value) 
$.each(columns, function(i) { 
    colWidths.desktop.title += columns[i].width; 
}); 

EDITAR

var grid = { 
    "name": "desktop", 
    "columns": [ 
     { 
     "id": "icons", 
     "width": 50}, 
    { 
     "id": "title", 
     "width": 200}, 
    { 
     "id": "name", 
     "width": 300}, 
    { 
     "id": "revision", 
     "width": 400} 
    ] 
}; 

var columns = grid.columns; 
var gridName = grid.name; 

var colWidths = {}; 

// CHANGE HERE 
colWidths[gridName] = {}; 

$.each(columns, function(c) { 

    var col = columns[c]; 
    var colname = col.id; 
    var colwidth = col.width; 

    // CHANGE HERE 
    var thisGrid = colWidths[gridName]; 
    if(!thisGrid[colname]) thisGrid[colname] = 0; 

    thisGrid[colname] += colwidth; 

}); 

//alert(colWidths.desktop.title);​ 
document.write(JSON.stringify(colWidths)); 

// RESULT: 
// {"desktop":{"icons":50,"title":200,"name":300,"revision":400}} 
+0

Ok, todavía no me estoy poniendo correctamente. Cuando preparas el objeto, necesito que el "escritorio" sea dinámico y el "título" sea dinámico. Este objeto puede ser diferente de vez en cuando. – Paul

+0

Aquí está mi violín, todavía puedo estar haciéndolo mal http://jsfiddle.net/LW7FJ/ – Paul

+0

Lo siento, un Fiddle mejor aquí, he eliminado algo de información insignificante. http://jsfiddle.net/LW7FJ/6/ como puede ver, esto no está configurando el objeto correctamente. Me gustaría devolverlo como alerta (colWidths.desktop.title) etc ... – Paul