我正在为我的应用创建离线模式,我需要覆盖商店的同步功能。但是,当我这样做时,即使我拨打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的粘贴 同步位于底部。
答案 0 :(得分:-1)
如果您需要覆盖某个对象,最好的方法是使用选项&#34;覆盖&#34;。
Ext.define('Airit.store.App', {
override: 'Ext.data.Store',
sync: function() {
this.callParent(arguments)
//etc
}
});
只需使用&#34;要求&#34;对此。