Extjs 网格刷新:为什么在提交表单之前加载存储?

Extjs 网格刷新:为什么在提交表单之前加载存储?,extjs,extjs4,extjs4.2,Extjs,Extjs4,Extjs4.2,我有一个表单可以将对象添加到网格中。我的网格连接到具有代理的存储。我正在通过代理向我的数据库添加新条目。我可以成功地创建新条目,但在及时更新网格时遇到了问题。这是“我的表单”中的“提交”按钮: buttons: [{ text: 'Submit', formBind: true, /* only enabled once the form is valid*/ handler: function() { var form =

我有一个表单可以将对象添加到网格中。我的网格连接到具有代理的存储。我正在通过代理向我的数据库添加新条目。我可以成功地创建新条目,但在及时更新网格时遇到了问题。这是“我的表单”中的“提交”按钮:

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 dev tools中查看网络请求的顺序时,会在提交表单之前调用加载请求。当我再次按下submit按钮时,网格将刷新,显示我的所有数据以及之前添加的条目,但不是刚刚添加的条目。因此,我的网格在同步中总是落后于一个请求

我尝试调用了
sync()
,也在我的网格存储上调用了
load()
,但都没有用,load()应该足以更新我的网格。我认为请求的顺序是把事情搞砸的原因,但我不知道如何解决它


如果您有任何见解,我们将不胜感激。

确保在form.submit()之后调用load的一种方法是如下调用它:

myForm.getForm().submit({

    success: function(form, action) {
       store.load();
    }

});

话虽如此,我认为代码中的form.submit()应该在store.load()之前调用。您是否尝试在chrome中调试以查看首先执行的是什么?

submit方法是异步的,这意味着它不会停止处理程序方法中后续行的执行。在向服务器发出提交请求后,存储区立即加载记录。因此,这两个操作并不相关,第二个操作可以在第一个操作到达数据库之前完成(取决于您的服务器业务规则)。更新操作的成本往往更高

上面回答中提到的表单的“success”方法接受一个config对象。通过将任何代码放入“success”方法(还有其他方法:failure、callback等等,请参阅文档),您可以确保执行了第一个操作,然后可以安全地加载网格


Ext.data包中的几乎所有方法都是异步的。

是的,在Chrome中调试表明,在调用创建新条目的url之前,我的代理的url会被调用。我将尝试您的建议,并在几分钟后回复您在调用success属性中的函数之前,我必须更改对form POST请求的响应,但是刷新现在可以正常工作了!谢谢:谢谢你的澄清。这是有道理的!