Sencha ExtJs:修改存储/模型以部分处理记录

Sencha ExtJs:修改存储/模型以部分处理记录,extjs,model,proxy,callback,store,Extjs,Model,Proxy,Callback,Store,我有一个通过http请求填写的组合框。为此,将使用带有代理的JsonStore,模型定义如下: Ext.define('TreeModel', { extend: 'Ext.data.Model', fields: [ 'field_1', 'field_2' ] }); 如果我在读卡器中使用了rootProperty:“data”,那么这对以下响应非常有效: { "data":[{"field_1":1,"field_2":31

我有一个通过http请求填写的组合框。为此,将使用带有代理的JsonStore,模型定义如下:

Ext.define('TreeModel', {
    extend: 'Ext.data.Model',
    fields: [
        'field_1',
        'field_2'
    ]
});
如果我在读卡器中使用了
rootProperty:“data”
,那么这对以下响应非常有效:

{
    "data":[{"field_1":1,"field_2":318},
            {"field_1":2,"field_2":322}]
}
现在,我将通过添加错误描述来添加一些数据库错误处理,如:

{
    "data": [{"field_1":1,"field_2":318},
             {"field_1":2,"field_2":322}],
    "error":{"code":"0","message":null}
}
,所以我可以这样做:

TreeStore.load({
    callback: function(records, operation, success) {
                 App.checkServerReply(records[0].data.error);
              }
});

是否有任何方法可以修改模型或存储或其他内容,以便能够以显示的方式获得错误描述,并继续从数据数组填充组合框?在不修改响应格式的情况下获得解决方案的任何其他想法?

记录[0]
不能包含您的结果,因为您没有将其作为第一个结果记录的一部分发送。事实上,您可以将其作为元数据发送,但是没有定义良好且有文档记录的函数来访问传输的元数据(尽管我想每个人都会在某个时候发送它)

在ExtJS 4.2.2中,我使用以下内容:

store.load({
    callback: function(records, operation, success) {
        var rawData = store.getProxy().getReader().rawData;
        //Ext.MessageBox.alert(rawData.Caption, rawData.Message);
        App.checkServerReply(rawData.error);
    }
});
虽然没有询问,但我想指出,如果您从服务器发送
成功
标志,sencha允许您使用
成功
失败
,而不是
回调

{
    "success":true,
    "data": [{"field_1":1,"field_2":318},
             {"field_1":2,"field_2":322}],
    "error":{"code":"0","message":null}
}

在您的方法
load
中,您实际上可以执行以下操作:

TreeStore.load({
    callback: function (records, operation, success) {
        var data = Ext.JSON.decode(operation._response.responseText);
        if (!Ext.isEmpty(data.error)) {
            var error = data.error;
            //do your stuff with error.code and error.message
        }
    }
});

您不能为此使用
metachange
事件吗?当JSON中存在
元数据对象时,将触发什么?唉,出于某些原因,不希望更改JSON的格式。但是谢谢你的建议——这肯定是我不知道的另一件有用的事情!非常感谢-这正是我需要的!谢谢你!您和PawełGłowacz对单个问题的两个不同答案非常棒,并向我展示了ExtJs中还有很多东西还没有学会。希望我能将两者都标记为解决方案,但遗憾的是,我不得不通过计时来选择第一个。PS是
store.getProxy().getReader().rawData
关于竞争条件的安全性?而
callback
是最常用的方法,因为现在不可能编辑消息格式,但感谢您提供的信息!