我正在尝试在我的列中渲染一个字符串而不是你的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'。
出了什么问题?
答案 0 :(得分:1)
您收到错误是因为商店负载是异步的,因此渲染器的“返回”将在您收到,处理代理请求的响应并使其可用之前完成被分配给你想要设置的变量。
我建议您在此重新考虑您的方法。几个选项:
答案 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();
}
});
}
}
}
}
});
非常感谢!