0

我试图在我的列中渲染一个字符串而不是你的 id。我创建了这个解决方案:网格单元呈现错误,但它不适用于动态存储。

在我的网格中,我将商店加载到渲染器中:

columns: [
                  {xtype : 'gridcolumn', text: 'Id', dataIndex: 'id'},
                  {xtype : 'gridcolumn', text: 'Validade', dataIndex: 'dataValidade', renderer: function(object){return Ext.Date.format(object, 'd-m-Y');}},
                  {xtype : 'gridcolumn', text: 'Complexo', dataIndex: 'id', renderer: function(value) {
                        storeComplexoPorValidade.getProxy().url = caminhoContexto + "validade/complexoporid/" + value + "/dados.json";
                        storeComplexoPorValidade.load();
                        console.log(storeComplexoPorValidade);
                        var idx = storeComplexoPorValidade.find('id', value);
                        var rec = storeComplexoPorValidade.getAt(idx);
                        return rec.get('descricao');  
                        }
                  },

但是商店不会将数据加载到 var,尽管执行请求。我发现了错误:无法调用未定义的方法“get”。

怎么了?

4

2 回答 2

1

您收到错误是因为存储加载是异步的,因此来自渲染器的“返回”将在您的代理请求的响应被接收、处理并可以分配给您尝试的变量之前完成放。

我建议你在这里重新考虑你的方法。几个选项:

  1. 在创建网格之前加载您尝试用于自定义渲染的商店
  2. 使用执行自定义呈现所需的额外字段扩展网格存储的基础数据模型。您始终可以将这些额外字段标记为非持久性,因此它们不会包含在可能对模型实例执行的任何写入操作中。
于 2013-01-27T17:47:21.930 回答
0

感谢您的帮助,我有很多工作要让我的脚本正常工作。根据您的提示,我创建了另外两个解决方案,帮助我使我的代码正常工作。如何等到所有商店都加载到 ExtJs 中?http://www.sencha.com/forum/showthread.php?197265-Loading-stores-synchronously

这是我的代码工作:

Ext.define('validade', {
extend: 'Ext.data.Model',
fields: [{name: 'id', type: 'int'},
         {name: 'dataValidade', type: 'date', dateFormat:'Y-m-d'},
         {name: 'complexo', type: 'string', persist: 'false' }]         

});

Ext.define('ValidadeStore',{
extend: 'Ext.data.Store',
model: 'validade',
pageSize: itemsPerPage,
remoteSort: true,
    sorters: [{
        property : 'id',
        direction: 'DESC'
    }],
proxy: {
    type: 'ajax',
    url : '/validade/grid/dados.json',
    reader : {
        type : 'json',
        root : 'data'
    },
},
autoLoad: {
    callback: function(records, operation, success){
        var i = 0

        loadComplexo();

        function loadComplexo(){
            if (i < records.length) {
                var rec = records[i];
                i++;
                storeComplexo.getProxy().url = "validade/complexoporid/" + rec.get('id') + "/dados.json";
                storeComplexo.load({
                    callback: function(records, operation, success){
                        var rec_ = records[0];
                        rec.set('complexo',rec_.get('descricao'));
                        loadComplexo();
                    }
                });
            }
        }
    }
}

});

非常感谢!

于 2013-02-06T17:24:35.900 回答