¿Cómo hago que un Ext.Panel muestre un DataView usando JsonStore y XTemplate?

Esto parece que debería ser simple. Aquí está mi declaración de almacenamiento de datos:

var dataStore = new Ext.data.JsonStore({
    autoLoad : true,
    url : '#mvclink(' json.getCostReportsJsonData ')#&layout_type=txt',
    root : 'data',
    id : 'dataStoreId',
    fields : ['project', 'cost']
});

La URL en realidad la genera ColdFusion, que llama a la consulta y la convierte al formato Json. Creo que todo funciona correctamente aquí, porque el objeto Json regresa como:

{"recordcount":1,"columnlist":"project,cost","data":[{"project":"ABC","cost":2250}]}

Tengo datos ficticios allí por ahora, por lo que solo se devuelve una fila.

A continuación, declaro un Ext.Panel con un DataView en él:

var myPanel = new Ext.Panel({
    layout : 'fit',
    id : 'myPanel',
    title : "My Panel",
    monitorResize : true,
    deferredRender : false,
    items : new Ext.DataView({
        store : dataStore,
        tpl : costReportTemplate
    }),
    renderTo : Ext.getBody()
});

La plantilla a la que se hace referencia es una XTemplate:

var costReportTemplate = new Ext.XTemplate(
    '<tpl for=".">',
    '<p><b>{project}</b>: {cost:this.format}</p>',
    '</tpl>', {
    format : function (v) {
        var s = Ext.util.Format.usMoney(v);
        return s.substring(0, s.indexOf('.'));
    }
});

Al renderizar la página, puedo ver el panel, pero está completamente vacío y no recibo errores en Firebug. ¿Qué estoy haciendo mal?

preguntado el 03 de mayo de 12 a las 17:05

¡Me lo imaginé! No había usado un valor de costo ficticio con un punto decimal, por lo que la función de formato no funcionaba correctamente. Sin embargo, no estaba recibiendo ningún error. Lo cambié para verificar si (s.indexOf('.') != -1) y todo está bien ahora. -

1 Respuestas

¡Me lo imaginé! No había usado un valor de costo ficticio con un punto decimal, por lo que la función de formato no funcionaba correctamente. Sin embargo, no estaba recibiendo ningún error. Lo cambié para comprobar if (s.indexOf('.') != -1) y todo está bien ahora.

respondido 19 nov., 12:13

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.