将单个数组读入商店

时间:2015-11-25 16:47:55

标签: javascript extjs

我的商店:

Ext.define('MyApp.store.NameStore',{
    extend: 'Ext.data.Store',
    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            proxy:{
                type:'ajax',
                url:'../api/AdminPanel/GetNames',
                reader:{
                    type:'json',
                    rootProperty:'data'
                }
            },
            fields:[{
                name:'name',
                calculate:function(data) {
                    var x = data;
                    return x.replace('<','&lt;').replace('>','&gt;');
                }
            }]
        },cfg)]);
    }
});

商店应该采取的数据:

{"success":true,"data":["Axel Braun <axel.braun@contoso.com>","Andy Martin <amartin@contoso.com>","Charlotte Henrici <charlotte@contoso.com>"]}

我尝试使用json阅读器并覆盖&#34;计算&#34;和/或&#34;转换&#34;函数,但数据为undefined。 我也尝试使用array读者,因为它看起来很自然。但对于array读者,名称为str[0](&#34; A&#34;),ID为str[1](&#34; x&#34;),之前我甚至可以进入convert功能。

那么,如何将一维字符串数组转换为商店?

1 个答案:

答案 0 :(得分:1)

一种方法是覆盖Reader.getData(在Ext 4中)将您的字符串数组转换为对象数组。

Ext.define('MyApp.store.NameStore',{
    extend: 'Ext.data.Store',
    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            proxy:{
                type:'ajax',
                url:'../api/AdminPanel/GetNames',
                reader:{
                    type:'json',
                    rootProperty:'data',
                    getData: function(data) {
                        return data.map(function(str) {
                            return {emailSpec: str};
                        });
                    }
                }
            },
            fields:[
                'emailSpec',
                {
                    name:'name',
                    calculate: function(data) {
                        return data.emailSpec.replace('<','&lt;').replace('>','&gt;');
                    }
                }
            ]
        },cfg)]);
    }
});

在更高版本中,此功能称为transform,如CD..

所述
Ext.define('MyApp.store.NameStore',{
    extend: 'Ext.data.Store',
    constructor: function(cfg) {
        var me = this;
        cfg = cfg || {};
        me.callParent([Ext.apply({
            proxy:{
                type:'ajax',
                url:'../api/AdminPanel/GetNames',
                reader:{
                    type:'json',
                    rootProperty:'data',
                    transform: function(data) {
                        return data.map(function(str) {
                            return {emailSpec: str};
                        });
                    }
                }
            },
            fields:[
                'emailSpec',
                {
                    name:'name',
                    convert: function(data) {
                        return data.emailSpec.replace('<','&lt;').replace('>','&gt;');
                    }
                }
            ]
        },cfg)]);
    }
});