ExtJS的:如何使用列渲染器的AJAX调用?(extjs: how to use ajax cal

2019-09-16 18:40发布

我现在已经有了这样的:

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

如何才能做到这一点,还是有更好的办法?

Answer 1:

我不认为你可以做到这一点这样。 Ajax调用是异步的, renderer()函数是同步的。 我现在不能你怎么能混合在一起就可想而知了。

您需要获得所需的所有信息renderer()函数(所有细胞!)您呈现电网之前完成。 你为什么不能为它创建一个额外的存储,之前加载它,然后使用它吗?



Answer 2:

在此基础上螺纹煎茶论坛主题

我有进行异步渲染器。

在我的例子,我想在我的纪录协会显示的第一条记录的“名称”值。

“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')); 
}

它的工作对我很好!



文章来源: extjs: how to use ajax call in column renderer?