Sencha Touch的代理读者的rootProperty和Parse.com的REST API响应

时间:2014-05-30 00:01:03

标签: json rest sencha-touch parse-platform

我的后端是Parse.com的REST API,解析后会向我发送一个结果对象,如下所示:

{
    ...fields...
}

当只有对象时,意味着任何时候对一条记录进行创建,读取或更新。当我从Parse获取一组对象时,它会发出一个看起来像的结果对象:

{
    results: [
        {
            ...fields...
        } 
    ]
}

在ST中,当我将我的代理的读者的rootProperty设置为:'结果'时,我的读者无法读取创建的Parse发送的记录或更新,因此本地记录不会与服务器发送的记录同步。

当我将我的读者的rootProperty设置为:''时,我的本地记录会与Parse发送的记录同步,但现在我的列表需要商店,而不是&#39 ; t显示记录列表,因为Parse使用"结果"节点

我尝试使用setRootProperty,但是尽管在记录上调用save()之前确认读者的root属性实际上是:'',本地记录没有与Parse的响应同步。一旦我删除了对root属性进行实时更改的逻辑,它就会重新开始工作。

处理这种情况的建议方法是什么?任何帮助深表感谢!谢谢!

1 个答案:

答案 0 :(得分:0)

所以你有一个商店的代理有一个特定的rootProperty,但你有2种类型的响应,单个对象或结果中的对象数组。如果是这样,您的代理人肯定只能读取一种类型的响应。 一些解决方案:

- 如果您可以在服务器上运行,请确保始终发送一系列结果,无论响应是否包含一个或多个结果。

- 实现自定义阅读器(这是我在必须管理不同响应并同时对数据进行一些更改时所做的事情)

Ext.define('MyApp.store.MyStore',{
    extend:'Ext.data.Store',
    model:'MyApp.model.MyModel',
    proxy: {
        type:'jsonp',
        url:'#'
    },
    autoLoad:false,
    loadSolr:function(PARAMS){
        this.groupField = groupField;
        Ext.data.JsonP.request({
            scope:this,
            url: 'http://myserver.com',
            callbackKey: 'json.wrf',
            params: {
                PARAMS
            },
            success: function(response) {
                // handle your response here
                var records = [];
                Ext.each(response.results, function(record){
                    records.push({
                        field1: record.field1,
                        field2: record.field2
                    });
                });
                //load your data into store
                this.loadData(records);
            }
        });
    }
});

希望它有所帮助,如果我误解了某些内容,可以发布一些代码