spsteffl
spsteffl

Reputation: 413

Rally custom data store will not update

My Rally custom data store will not update. Im having the problem described in [this][1] post.

My scenario is: I will be adding rows to a grid, which has a custom data store. then I sort a grid column, and all the new rows I added get deleted. There is nothing fancy about my custom store, and I've tried autoSync:true, but that does nothing.

Are custom stores Read-only, in the sense that any changes made to the original data are transient and will get deleted with a reload()?

This is my store that I add to the rallygrid

        me.customStore = Ext.create('Rally.data.custom.Store', { 
            data: customData,
            listeners:{
                load: function(customStore){
                    //do some stuff
                }
            }
        });

Upvotes: 1

Views: 252

Answers (1)

spsteffl
spsteffl

Reputation: 413

I looked at the source code for the memory proxy and it makes sense why nothing was getting added or removed or updating correctly with the Rally.data.custom.Store store. You have to override the create and destroy methods of the memory proxy.

CURRENT MEMORY PROXY FUNCTIONS

These are functions that are used to create and destroy records for the memory proxy. As you can see, they dont create or destroy any records...

updateOperation: function(operation, callback, scope) {
    var i = 0,
        recs = operation.getRecords(),
        len = recs.length;

    for (i; i < len; i++) {
        recs[i].commit();
    }
    operation.setCompleted();
    operation.setSuccessful();

    Ext.callback(callback, scope || this, [operation]);
},    

create: function() {
    this.updateOperation.apply(this, arguments);
},

destroy: function() {
    this.updateOperation.apply(this, arguments);
},

CORRECT MEMORY PROXY SETUP

Below is how to instantiate a custom store that will actually add and remove records in the custom store

    me.customStore = Ext.create('Rally.data.custom.Store', {
        data: //customData
        model: //modelType
        autoSync:true,
        proxy: {
            type:'memory',
            create: function(operation) {
                var me = this;
                operation.getRecords().forEach(function(record){
                    console.log('adding record', record);
                    me.data.push(record);
                });
                this.updateOperation.apply(this, arguments);
            },
            destroy: function(operation) {
                var me = this;
                operation.getRecords().forEach(function(record){
                    console.log(record);
                    for(var i = 0;i<me.data.length;++i){
                        if(/*me.data[i] == record*/ ){
                            me.data.splice(i, 1);
                            return;
                        }
                    }
                });
                this.updateOperation.apply(this, arguments);
            }
        },
        listeners://listener stuff here
    });

Upvotes: 1

Related Questions