数组不在 JSON 响应的 root-level 处的 Dojo JsonRestStore
Dojo JsonRestStore with array not at root-level of JSON response
有没有一种方法可以配置 JsonRestStore 以与 return 是一个 objects 的现有 Web 服务一起工作,该 不是 JSON 响应的 root-level?
我的 JSON 回复目前与此类似:
{
message: "",
success: true,
data: [
{ name: "Bugs Bunny", id: 1 },
{ name: "Daffy Duck", id: 2 }
],
total: 2
}
我需要告诉 JsonRestStore 它将找到 "data" 下的行,但我无法通过查看 documentation 找到执行此操作的方法。架构似乎是一种可能性,但我无法通过文档(或我在 Google 中找到的内容)理解它。
我的 Web 服务 return 数据采用 Ext JS 中商店所期望的格式,但我现在无法重构多年的 Web 服务(通过 HTTP headers 而不是查询处理分页字符串值可能也很有趣,但这是另一天的问题)。
谢谢。
dojo/store 的想法是提供参考存储,但它们旨在进行自定义以匹配您想要的任何数据格式。例如,https://github.com/sitepen/dojo-smore 有一些额外的商店(例如处理 Csv 数据的商店)。这些存储为如何处理在不同结构下提供的数据提供了很好的示例。
还有新的 dstore 项目 http://dstorejs.io/ ,它最终将取代 Dojo 2 中的 dojo/store,但现在针对 Dojo 1.x。这可能更容易创建自定义商店以匹配您的数据结构。
虽然它在 API 文档中几乎没有被调用,但在 dojox/data/JsonRestStore
中有一个名为 _processResults
的内部方法恰好可以很容易地覆盖用于此目的。它接收服务 returned 的数据和来自请求的原始 Deferred,并预期 return 一个包含 items
和 totalCount
.
的对象
根据您上面的数据,类似这样的方法应该有效:
var CustomRestStore = declare(JsonRestStore, {
_processResults: function (results) {
return {
items: results.data,
totalCount: results.total
};
}
});
有没有一种方法可以配置 JsonRestStore 以与 return 是一个 objects 的现有 Web 服务一起工作,该 不是 JSON 响应的 root-level?
我的 JSON 回复目前与此类似:
{
message: "",
success: true,
data: [
{ name: "Bugs Bunny", id: 1 },
{ name: "Daffy Duck", id: 2 }
],
total: 2
}
我需要告诉 JsonRestStore 它将找到 "data" 下的行,但我无法通过查看 documentation 找到执行此操作的方法。架构似乎是一种可能性,但我无法通过文档(或我在 Google 中找到的内容)理解它。
我的 Web 服务 return 数据采用 Ext JS 中商店所期望的格式,但我现在无法重构多年的 Web 服务(通过 HTTP headers 而不是查询处理分页字符串值可能也很有趣,但这是另一天的问题)。
谢谢。
dojo/store 的想法是提供参考存储,但它们旨在进行自定义以匹配您想要的任何数据格式。例如,https://github.com/sitepen/dojo-smore 有一些额外的商店(例如处理 Csv 数据的商店)。这些存储为如何处理在不同结构下提供的数据提供了很好的示例。
还有新的 dstore 项目 http://dstorejs.io/ ,它最终将取代 Dojo 2 中的 dojo/store,但现在针对 Dojo 1.x。这可能更容易创建自定义商店以匹配您的数据结构。
虽然它在 API 文档中几乎没有被调用,但在 dojox/data/JsonRestStore
中有一个名为 _processResults
的内部方法恰好可以很容易地覆盖用于此目的。它接收服务 returned 的数据和来自请求的原始 Deferred,并预期 return 一个包含 items
和 totalCount
.
根据您上面的数据,类似这样的方法应该有效:
var CustomRestStore = declare(JsonRestStore, {
_processResults: function (results) {
return {
items: results.data,
totalCount: results.total
};
}
});