自定义商店实现错误

Custom store implementing errors

我正在尝试使用 ExtJS 3.4 实现自定义商店。 我使用 this forum post 和 ExtJS4 版本。

现在我的代码如下所示:

Ext.define('TestStore', {
    extend: 'Ext.data.Store',
    //model: 'TestModel',
    fields: [
        {name: 'date'},
        {name: 'number'},
        {name: 'percent'}
    ],
    storeId: 'TestStore',
    generateData: function() {
        var me = this,
            data = [];
        // generate 10 records
        for( var i=0;i<10;i++) {
            data.push([
                me.randomDate(new Date(2012, 0, 1), new Date()),
                Math.floor( Math.random() * 1000 ),
                ( ( Math.random() * 1000 ) / 3.2 ).toFixed( 1 )
            ]);
        }
        console.log(data);
        return data;
    },
    randomDate: function(start, end) {
        return new Date(
            start.getTime() + Math.random() * (end.getTime() - start.getTime())
        );
    },
    constructor: function() {
        console.log('constructor!');
        var me = this;
        me.superclass.constructor.apply(me, arguments);
        me.loadData(me.generateData(), true);
        //me.add(me.generateData());
    }
});

我看到这个错误:

TypeError: this.reader is undefined

我的代码中断的部分:

loadData : function(o, append){
    var r = this.reader.readRecords(o); <-------
    this.loadRecords(r, {add: append}, true);
},

如何正确设置reader?我想我需要 ArrayReader,但我无法正确设置它。我试了很多方法...

ExtJS 3.4 的工作代码:

App.store.documents.documentsRandomStore = Ext.extend(Ext.data.Store, {
reader: new Ext.data.ArrayReader(
    {
        idIndex: 0  // id for each record will be the first element
    },
    //rt // recordType
    Ext.data.Record.create([
        {name: 'date'},
        {name: 'number'},
        {name: 'percent'}
    ])
),
storeId: 'documentsRandomStore',
generateData: function(count) {
    var data = [];
    // generate records
    for(var i=0; i<count; i++) {
        data.push([
            this.randomDate(new Date(2016, 0, 1), new Date()),
            'Документ ' + Math.floor( Math.random() * 100 ),
            ( ( Math.random() * 1000 ) / 3.2 ).toFixed( 1 )
        ]);
    }
    return data;
},
randomDate: function(start, end) {
    return new Date(
        start.getTime() + Math.random() * (end.getTime() - start.getTime())
    );
},
constructor: function(count) {
    App.store.documents.documentsRandomStore.superclass.constructor.apply(this, arguments);
    this.loadData(this.generateData(count));
}
});