Store不会在渲染器网格单元格中加载

时间:2013-01-27 17:09:24

标签: extjs grid store renderer

我正在尝试在我的列中渲染一个字符串而不是你的id。我创建了这个解决方案:Grid cell is rendering wrong,但它不适用于动态商店。

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

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'。

出了什么问题?

2 个答案:

答案 0 :(得分:1)

您收到错误是因为商店负载是异步的,因此渲染器的“返回”将在您收到,处理代理请求的响应并使其可用之前完成被分配给你想要设置的变量。

我建议您在此重新考虑您的方法。几个选项:

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

答案 1 :(得分:0)

感谢您的帮助,我有很多工作要让我的脚本正常工作。通过您的提示,我创建了另外两个解决方案,帮助我实现代码。 How to wait until all stores are loaded in 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();
                    }
                });
            }
        }
    }
}

});

非常感谢!