【问题标题】:Sencha ExtJs: modify a store/model to handle records partiallySencha ExtJs:修改存储/模型以部分处理记录
【发布时间】:2015-11-22 01:27:06
【问题描述】:

我有一个通过 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);
              }
});

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

【问题讨论】:

  • 您不能为此使用metachange 事件吗,当您的JSON 中出现metadata object 时会触发什么? stackoverflow.com/questions/31382790/…
  • 唉,由于某些原因,不希望更改 JSON 的格式。但感谢您的建议 - 这肯定是我不知道的另一件有用的事情!

标签: extjs model proxy callback store


【解决方案1】:

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

虽然没有被问到,但我想指出的是,如果您从服务器传递 success 标志,则 sencha 允许您使用 successfailure 而不是 callback

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

【讨论】:

  • 谢谢!您和 Paweł Głowacz 对单个问题的两个不同答案非常棒,向我展示了在 ExtJs 中仍然没有学到很多东西。希望我可以将两者都标记为解决方案,但可惜 - 只能按时间选择第一个。
  • PS store.getProxy().getReader().rawData 在竞争条件下是否安全?并且callback 主要使用,因为现在无法编辑消息格式,但感谢您提供信息!
【解决方案2】:

在您的方法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
        }
    }
});

【讨论】:

  • 非常感谢 - 这正是我所需要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
相关资源
最近更新 更多