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

时间:2015-01-05 23:12:39

标签: javascript json rest dojo jsonschema

有没有办法配置JsonRestStore以使用现有的Web服务,该服务返回JSON响应根级别的对象数组?

我的JSON响应目前与此类似:

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

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

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

感谢。

2 个答案:

答案 0 :(得分:2)

虽然它在API文档中几乎没有出现,但dojox/data/JsonRestStore中有一个名为_processResults的内部方法恰好可以为此目的进行覆盖。它接收服务返回的数据和请求中的原始Deferred,并且应该返回包含itemstotalCount的对象。

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

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

答案 1 :(得分:0)

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

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