【问题标题】:Converting Sencha Touch 2.4 Store Data into JSON将 Sencha Touch 2.4 存储数据转换为 JSON
【发布时间】:2015-01-15 00:30:03
【问题描述】:

我有一个 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'
            }
        ]
    }
});

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

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

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

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

【问题讨论】:

  • 可以使用store的getRange方法。

标签: json extjs sencha-touch touch store


【解决方案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

现在我需要弄清楚的是如何将它附加到传出的请求对象上,然后我将被设置...但如果我无法弄清楚,那将是一个单独的问题。

【讨论】:

  • 您可能想弄清楚 GET 和 POST 请求之间的长度限制。
【解决方案2】:

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

var json = store.proxy.reader.jsonData;

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多