2011-09-21 26 views
5

Estoy tratando de mostrar el siguiente objeto JSON usando YUI DataTable. Pude mostrar el apellido, firstName, startDate, employeeCode, employeeStatus con éxito en YUI DataTable. Pero no pude mostrar los valores en el objeto interno. En el conjunto de columnas intenté user.userId y se muestra como {value} en DataTable.Mostrar el objeto JSON en YUI Datatable

[  
{ 
      "lastName": "MyLastName", 
      "firstName": "MyFirstName", 
      "startDate": "11-11-11", 
      "employeeCode": "124", 
      "employeeStatus": "Permanent", 
      "user": { 
       "key": { 
        "name": null, 
        "parent": { 
         "name": null, 
         "parent": null, 
         "id": 855, 
         "namespace": "", 
         "complete": true, 
         "kind": "Employee" 
        }, 
        "id": 856, 
        "namespace": "", 
        "complete": true, 
        "kind": "Users" 
       }, 
       "salt": null, 
       "userId": "[email protected]", 
       "status": true, 
}, 
{ 
... 
} 
] 

Este es el código Javascript:

<script type="text/javascript"> 
YUI().use("jsonp", 'sortable', 'json-parse', 'datatable', "datatable-sort", "io", "node", function(Y) { 
var nestedCols = [ 
    {key : "employeeCode",label : "Employee Code", sortable:true}, 
    {key : "firstName", label : "First Name",sortable: true}, 
    {key : "lastName", label : "Last Name", sortable:true}, 
    {key : "user.userId", label : "Email Id"}, 
    ]; 
Y.io('/Employee/AjaxList', { 
on : { 
success : function(tx, r) { 
var data = Y.JSON.parse(r.responseText); 
var table = new Y.DataTable.Base({ 
     columnset : nestedCols, 
     recordset : data, 
     }).plug(Y.Plugin.DataTableSort); 
     table.render("#empTable"); 
} 
} 
}); 
}); 
</script> 

¿hay algo malo con este fragmento de código? ¿Cómo puedo mostrar el valor de user.userId en DataTable?

Nota: El JSON se genera utilizando Jackson y aplicación se desarrolla en GAE/J


UPDATE:

Solía ​​DataSource siguiendo la sugerencia por @Luke. Esta vez obtuve una DataTable vacía con solo los encabezados. Aquí está el fragmento de código.

YUI().use("datasource-get", "datatable-base", "datatable-datasource","datasource-arrayschema", function (Y) { 

var url = "/Employee/AjaxList?"; 
var dataSource, table; 

dataSource = new Y.DataSource.Get({ source: url }); 

dataSource.plug(Y.Plugin.DataSourceArraySchema, { 
     schema: { 
       resultFields: ["firstName", "lastName"] 
       } 
     }); 

var cols = ["firstName", "lastName"]; 

table = new Y.DataTable.Base({ 
       columnset: cols, 
}); 

table.plug(Y.Plugin.DataTableDataSource, { datasource: dataSource }); 

table.render("#empTable"); 

table.datasource.load(); 
}); 

Respuesta

1

Tengo la solución de YUI foros siguiente mi post en el foro: http://yuilibrary.com/forum/viewtopic.php?f=92&t=8685

este es el código que funcionó para mí:

YUI().use("datasource-io", "datasource-jsonschema", "datatable-base", "datatable-datasource", "datatable-scroll", 
      function (Y) { 
    var cols = [  
      { key: "name", label: 'Name' }, 
      { key: "email", label: "Email" }, 
      { key: "user.username", label: 'Username' }, 
      { key: "user.password", label: 'Password' }, 
     ]; 
    car url = "/Employee/AjaxList"; 
    var ds = new Y.DataSource.IO({ 
     source:url 
    }); 
    ds.plug(Y.Plugin.DataSourceJSONSchema, { 
      schema: { 
       resultFields: [ 'name', 'email', 'user.username', 'user.password' ], 
      } 
     }); 
    var dt = new Y.DataTable.Base({ 
     columnset:cols }) 
     .plug(Y.Plugin.DataTableDataSource, {datasource:ds}); 
    dt.render("#dtable"); 
    dt.datasource.load(); 
}); 

Espero que esto ayude a alguien que está luchando con DataTable & origen de datos.

1

Deberá usar datasource-jsonschema para analizar los valores anidados. Vea este ejemplo: http://yuilibrary.com/yui/docs/datatable/datatable-dsget.html

Usted debe ser capaz de seguir esos pasos, sustituyendo Y.DataSource.Get con Y.DataSource.IO

+0

He intentado utilizar el origen de datos, pero ahora parece que YUI está enviando una solicitud incorrecta al servidor. Esta es la URL que obtuve de la consola firebug: http: // localhost: 8080/ExampleApp/Employee/AjaxListundefined & callback = YUI.Env.DataSource.callbacks.yui_3_4_0_1_1316763699238_127 La URL correcta es http: // localhost: 8080/ExampleApp/Employee/AjaxList – libregeek

+0

Por favor, ignore el comentario anterior, resolví este problema agregando un '?' al final de la URL de origen. Pero aún así los datos no están incluidos en la tabla de datos. Puedo ver los datos JSON en la consola Firebug. – libregeek

+0

He actualizado la pregunta con la secuencia de comandos utilizando datasource-arrayschema. Creo que la respuesta que recibo es una matriz y no pude identificar resultListLocator para datasource-jsonschema – libregeek