2011-01-10 76 views
8

Me pregunté si alguien más había encontrado este problema. Cuando originalmente construí mi tabla en mi opinión, estoy usando un atributo personalizado (llámelo customerID) en cada fila de la tabla para contener la información que tendré que pasar para una llamada ajax. Sin embargo, también estoy agregando dinámicamente filas a la tabla, y no puedo encontrar la forma de devolver esa misma información (customerID) para ponerla en un atributo para la fila. Actualmente, lo único que hago al agregar filas es crear una matriz de cadenas de cadenas que se correspondan exactamente con mis columnas. Esto funciona bien, pero no hay espacio para enviar información adicional.Complemento jQuery Datatables: Cómo especificar los atributos de fila al agregar filas a la tabla

Supongo que no necesito almacenar eso en un atributo, si hay otra forma de enviar esa información a la vista al agregar filas. ¿Alguien tiene alguna idea sobre esto?

Gracias.

+0

¿No puedes guardar este atributo en la columna oculta? – a1ex07

+0

Cuando establece una columna como oculta a través del complemento (usando bVisible en la configuración), el complemento literalmente * elimina * la columna del DOM y la almacena en una variable dentro del complemento. Entonces, por mi cuenta, no puedo seleccionar los datos de la columna porque ya no están. –

+0

Pero todavía tiene acceso a él a través de 'fnGetData'. ¿No te funciona? – a1ex07

Respuesta

1

Pude resolver este problema utilizando las funciones incorporadas del complemento para recorrer las filas una por una. En el servidor, creé una clase privada que contenía campos para toda la información que necesitaba una vez que volvía al cliente. Esto incluye los valores reales de las celdas de la tabla, pero también la información que debe colocarse en los atributos. Creo una lista de estos (un objeto = información valiosa de una fila), los serializo y los envío al método ajax llamante. El código siguiente se supone que he recibido la cadena en serie de objetos hacia atrás, y yo estoy en JS:

function(rowsToAdd) { 

    var rowList = JSON.parse(rowsToAdd); // rows come back as object representations of table rows, with properties 

    $.each(rowList, function(index, row) { 
     var rowStringArray = [row.Prop1, row.Prop2, row.Prop3, row.Prop4]; 
     var rowPos = tableObject.fnAddData(rowStringArray); // add the row through the plugin, and receive the row's index in return 
     var tableRowElement = tableObject.fnGetNodes(rowPos[0]); // get reference to <tr> element just added 

     $(tableRowElement).attr('attributeINeeded', row.AttributeProp).attr('anotherAttributeINeeded', row.AttributeProp2); 
    }); 
} 
+0

Nunca recomendaría esta solución a alguien cuya tabla contenga una cantidad significativa de datos. Casi nunca vale la pena el impacto en el rendimiento al recorrer cada fila de la tabla * después de * creación. – Kehlan

Cuestiones relacionadas