Rally自定义数据存储不会更新

时间:2014-07-24 17:43:28

标签: javascript rally appsdk2

我的拉力赛自定义数据存储不会更新。我有[本] [1]中描述的问题。

我的方案是:我将向网格添加行,该网格具有自定义数据存储。然后我排序一个网格列,我添加的所有新行都被删除。我的自定义商店没什么特别的,我尝试过autoSync:是的,但是没有做任何事情。

自定义存储是否为只读,因为对原始数据所做的任何更改都是暂时的,并且会在重新加载()时被删除?

这是我添加到拉力赛网格的商店

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

1 个答案:

答案 0 :(得分:1)

我查看了内存代理的源代码,为什么没有添加或删除任何内容或使用Rally.data.custom.Store存储正确更新。您必须覆盖内存代理的create和destroy方法。

当前内存代理功能

这些函数用于创建和销毁内存代理的记录。如您所见,他们不会创建或销毁任何记录......

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);
},

正确的内存代理设置

以下是如何实例化实际添加和删除自定义商店中的记录的自定义商店

    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
    });