我现在得到的是:
renderer : function(value) {
var ret;
var conn = new Ext.data.Connection();
conn.request({
method : 'POST',
url : rsdBackend,
params : {
get_object_by_id : 'true',
rsd_type : record.data.references_table,
object_id : value,
uid : logged_user_id
},
success : function(responseObject) {
var data = Ext.decode(responseObject.responseText);
ret = data[0].object_name;
}
});
return ret;
}
如果列包含指向另一个数据的链接(数据库术语中的外键),我需要显示它引用的对象的名称。
所以,我能想到的最佳方法是在渲染器中使用ajax调用。它有效,但问题是:我该如何回复?
以上代码无法使用,因为ret
未定义,我正在尝试return
。
如何做到这一点,还是有更好的方法?
答案 0 :(得分:2)
我认为你不会这样做。 Ajax调用是异步的,renderer()
函数是同步的。我现在无法想象如何将它们混合在一起。
在渲染网格之前,您需要获取renderer()
函数(对于所有单元格!)所需的所有信息。为什么不能为它创建额外的存储,先加载它然后再使用它?
答案 1 :(得分:2)
基于此帖子Sencha forum thread
我制作了一个异步渲染器。
在我的示例中,我想显示记录关联中第一条记录的“名称”值。
“fileRecord_store()”是我的关联商店的名称(通过“hasMany”关联模型创建)
在网格面板中,您可以制作如下渲染器:
{ header: 'Filename', dataIndex: 'Files_id', flex: 2,
renderer: function(value, meta, record, rowIndex, colIndex, store, view) {
var divId = 'my_cell_to_update_' + record.id;
record.columnsNameUpdate(divId);
return String.format("<div id='" + divId + "'>Loading...</div>");
}
},
现在在模型类中我添加了这个函数:
columnsNameUpdate : function(divId){
this.fileRecord_store().on('load', this.updateColumn,this, {divId : divId});
this.fileRecord_store().load();
},
updateColumn : function(store, model, success, options){
this.fileRecord_store().un('load', this.updateColumn,this);
Ext.fly(options.divId).update(store.first().get('filename'));
}
这对我来说很好用!