我有一个将对象添加到网格的表单。我的网格连接到具有代理的商店。我正在通过代理向我的数据库中添加新条目。我可以成功创建新条目,但我无法及时更新我的网格。这是我的表单中的提交按钮:
buttons: [{
text: 'Submit',
formBind: true, /* only enabled once the form is valid*/
handler: function() {
var form = this.up('form').getForm()
if(form.isValid()) {
form.submit()
}
Ext.getCmp('grid').getStore().load({
callback: function(records, operation, success) {
console.log(records);
}
})
}
}]
当我在我的应用中运行时,在我查看Chrome开发工具中的网络请求顺序时,会在提交表单之前调用加载请求。当我再次按下提交按钮时,网格会刷新显示我的所有数据加上之前添加的条目,但不会显示刚刚添加的条目。因此,我的网格始终是同步中的一个请求。
我尝试过调用sync()
并在Grid的商店中调用load()
,但无济于事。 According to what I've read though,load()应足以更新我的网格。我认为请求的顺序是什么搞乱了,但我不知道如何解决它......
非常感谢任何见解。
答案 0 :(得分:2)
有一种方法可以确保在form.submit()之后调用load,就像调用它一样:
myForm.getForm().submit({
success: function(form, action) {
store.load();
}
});
话虽如此,我认为你的代码中的form.submit()应该在store.load()之前调用。您是否尝试过使用chrome进行调试以查看首先执行的操作?
答案 1 :(得分:1)
'submit'方法是异步的,这意味着它不会停止处理程序方法中后续行的执行。在向服务器提交提交请求之后,商店正在加载记录。因此,这两个操作不相关,第二个操作可以在第一个操作数据库之前完成(取决于您的服务器业务规则)。更新操作往往会产生更多成本。
上面的答案中提到的这个表单的“成功”方法采用了一个配置对象。通过在“成功”方法中放置任何代码(还有其他方法:失败,回调,...查看文档),确保进行第一次操作,然后就可以安全地加载网格。
Ext.data包中的几乎所有方法都是异步的。