Dojo JsonRestStore 的数组不在 JSON 响应的根级别

Dojo JsonRestStore with array not at root-level of JSON response

本文关键字:响应 JSON JsonRestStore 数组 Dojo      更新时间:2023-09-26

有没有办法将 JsonRestStore 配置为与返回不在 JSON 响应根级别的对象数组的现有 Web 服务一起使用?

我的 JSON 响应目前类似于以下内容:

{
    message: "",
    success: true,
    data: [
        { name: "Bugs Bunny", id: 1 },
        { name: "Daffy Duck", id: 2 }
    ],
    total: 2
}

我需要告诉 JsonRestStore 它会在"data"下找到行,但我通过查看文档看不到这样做的方法。模式似乎是一种可能性,但我无法通过文档(或我在 Google 中找到的内容)来理解它。

我的 Web 服务

以 Ext JS 中存储所期望的格式返回数据,但我现在无法重构多年的 Web 服务(通过 HTTP 标头而不是查询字符串值处理分页也可能很有趣,但这是另一天的问题)。

谢谢。

虽然它在 API 文档中几乎没有被提及,但dojox/data/JsonRestStore中有一个名为 _processResults 的内部方法恰好可以为此目的轻松覆盖。 它接收服务返回的数据和请求中的原始延迟,并期望返回包含itemstotalCount的对象。

根据上面的数据,这样的事情应该有效:

var CustomRestStore = declare(JsonRestStore, {
    _processResults: function (results) {
        return {
            items: results.data,
            totalCount: results.total
        };
    }
});

dojo/store 的想法是提供参考存储,但它们旨在自定义以匹配您想要的任何数据格式。例如,https://github.com/sitepen/dojo-smore 有一些额外的存储(例如,处理 Csv 数据的存储)。这些存储为如何处理在不同结构下提供的数据提供了很好的示例。

还有新的dstore项目 http://dstorejs.io/,它最终将取代Dojo 2中的dojo/store,但今天与Dojo 1.x对抗。这对于创建自定义存储以匹配您的数据结构可能更容易。