Ext.Data.Connection请求结果不在网格上呈现?

时间:2010-02-14 08:48:35

标签: json extjs

我一直坚持这个问题

我的JSon商店字段需要检索更多信息:

 { name: "ExpirationDate", convert: convertDate },
 { name: "AffectedObject", convert: GetValue }, 

日期方法工作正常但GetValue的结果是在网格上呈现,即使代码工作并返回正确的值(使用或不使用JSON):

function GetValue(v) {
    var conn = new Ext.data.Connection();
    conn.request({
        url: 'test/GetObjectByID',
        method: 'POST',
        params: { id: v },
        scriptTag: true,
        success: function (response) {
            console.log(response.responseText);
            ReturnResult(response.responseText);
        },
        failure: function () {
            Ext.Msg.alert('Status', 'Something went wrong');
        }
    });


function ReturnResult(str) {
    return Ext.util.JSON.decode(str.toString());
}

知道为什么结果没有显示?

1 个答案:

答案 0 :(得分:0)

'convert'属性期望立即返回值。您的GetValue函数发出异步请求,然后立即返回任何内容。在请求完成后的某个任意点,调用'success'函数,但它不再连接到原始调用,因此它可能返回的任何值都是无意义的。

虽然您可以通过将Ext.data.Connection替换为手动构建的同步请求来使其工作,但我建议您重新考虑获取此数据的机制。为数据存储中的每条记录发出单独的请求不是最佳的。

最佳解决方案是在服务器端引入其他数据,并将其包含在对商店代理的初始请求的响应中。如果无法完成,那么您可以尝试通过单个请求监听商店的“加载”事件并对所有已加载的记录执行转换。您从商店中读取的任何网格或其他视图可能必须配置为在转换请求完成之前显示虚拟文本以代替丢失的数据。