Sencha ExtJs:修改一个 store/model 以部分处理记录

Sencha ExtJs: modify a store/model to handle records partially

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

Ext.define('TreeModel', {
    extend: 'Ext.data.Model',
    fields: [
        'field_1',
        'field_2'
    ]
});

如果我在 reader 中使用了 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);
              }
});

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

Records[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 允许你使用 successfailure 而不是 callback,如果你传递一个 success 标志来自服务器:

{
    "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
        }
    }
});