转换Sencha Touch 2.4将数据存储到JSON中

时间:2014-11-17 23:19:03

标签: json extjs sencha-touch touch store

我有一个WebAPI端点,它接受一些JSON对象作为参数,并返回其他数据的集合。

这是一个工作要求:

POST http://mylocalmachine/api/Search
Accept: application/json
Content-Type: application/json
[
{'filterName' : 'ProductType','filterValue' : 'Shoes'}
]

在Sencha Touch中,我创建了一个商店('SearchFilters'),它将包含一系列“过滤器”,我想将其作为不同商店的请求主体(“MyData”)发送。

Ext.define('MyApp.store.SearchFilters', {
    extend: 'Ext.data.Store',

    requires: [
        'Ext.data.Field'
    ],

    config: {
        autoLoad: true,
        data: [
            {
                filterName: 'ProductType',
                filterValue: 'Shoes'
            },
            {
                filterName: 'Region',
                filterValue: 'NorthWest'
            }
        ],
        storeId: 'SearchFilters',
        fields: [
            {
                name: 'filterName',
                type: 'string'
            },
            {
                name: 'filterValue',
                type: 'string'
            }
        ]
    }
});

由于过滤器可以更改(或稍后从数据库加载),我试图将JSON有效负载附加到'MyData'存储请求,然后像这样触发Load:

onStoreBeforeLoad: function(store, operation, eOpts) {
        var filterData = Ext.getStore('SearchFilters').getData();
        operation.request.setJsonData(Ext.JSON.encode(filterData));
    }

我遇到的问题是Ext.JSON.encode函数在尝试转换'SearchFilters'中的数据时抛出错误。错误是“堆栈溢出”,如果我设置了一个断点并观察它,似乎存在无限循环。显然,我抓的不只是“SearchFilter”商店中的几条过滤器记录。

将商店中的一些记录转换为JSON格式的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以轻松地将商店数据检索为JSON:

var json = store.proxy.reader.jsonData;

答案 1 :(得分:-1)

Rot把我放在正确的轨道上,但是jsonData属性是' Ext.data.Request'的成员。不是' Ext.data.reader.Json'。

我确实尝试使用Sujata

建议的getRange方法
Ext.encode(Ext.getStore('SearchFilters').getRange()); //Did not work

...但它也会抛出堆栈溢出错误

我终于能够使用以下代码对整套存储模型进行编码:

Ext.encode(Ext.getStore('SearchFilters').getProxy().getReader().rawData); //Works

现在我需要弄清楚的是如何将它附加到传出请求对象并且我将被设置......但如果我无法解决这个问题,那就是一个单独的问题。< / p>