同步功能被覆盖时存储不同步Sencha Touch 2.3

时间:2014-04-04 14:37:02

标签: extjs sencha-touch sencha-touch-2 sencha-touch-2.1

我正在为我的应用创建离线模式,我需要覆盖商店的同步功能。但是,当我这样做时,即使我拨打this.callParent(arguments),商店也不会同步。

这是被覆盖的功能:

sync: function(){
    if(appOnline){
        console.log('App is online');
        this.callParent(arguments);
    }   
    else{
        console.log('App is offline');
        var found = false;

        for(var i = 0; i < storeSyncList.length; i++){
            if(storeSyncList[i] === this){
                found = true;
                break;
            }
        }

        if(!found)
            storeSyncList.push(this);
    }   
}

为什么this.callParent(arguments)无效?当应用程序上线时,该函数被调用如下:

storeSyncList[i].sync.call(storeSyncList[i],{
    scope: this,
    callback: function(records, operation, success){
        console.log('test1');
        console.log('successful sync: '(success ? 'Yes' : 'No'));
    }
});

正如您在电话中看到的那样,我作为this的{​​{1}}部分传入商店。 sync.call()是当应用重新上线时正在同步的当前商店。

storeSyncList[i]是商店时,有谁知道为什么this.callParent(arguments)不会进行同步?我知道不是。当我查看数据库时,它不会更新,并且永远不会调用this函数。但是,我确信它正在运行callback行。这是怎么回事?

更新:逐行调试后,正在跳过对sync.call的调用。我无法进入该函数并且它永远不会运行,程序只是将它传递给它,好像它不在那里并且到达函数的末尾。很奇怪。谁知道为什么?

编辑:整个班级http://pastebin.com/WMZTh5PR的粘贴 同步位于底部。

1 个答案:

答案 0 :(得分:-1)

如果您需要覆盖某个对象,最好的方法是使用选项&#34;覆盖&#34;。

Ext.define('Airit.store.App', {
    override: 'Ext.data.Store',
    sync: function() {
       this.callParent(arguments)
       //etc
    }
});

只需使用&#34;要求&#34;对此。