1

我有一个将对象添加到网格的表单。我的网格连接到具有代理的商店。我正在通过代理向我的数据库中添加新条目。我可以成功创建新条目,但无法及时更新我的​​网格。这是我的表单中的提交按钮:

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(),也打电话load()给我的网格商店,但无济于事。根据我读过的内容, load() 应该足以更新我的网格。我认为请求的顺序是把事情搞砸了,但我不知道如何解决它......

任何见解将不胜感激。

4

2 回答 2

2

您可以确保在 form.submit() 之后调用 load 的一种方法是将其称为:

myForm.getForm().submit({

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

});

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

于 2013-07-22T23:26:45.240 回答
1

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

上面答案中提到的这种表单的“成功”方法需要一个配置对象。通过将任何代码放在“成功”方法中(还有其他方法:失败、回调,...请参阅文档),您可以确保执行第一个操作,然后您可以安全地加载网格。

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

于 2013-07-22T23:43:44.047 回答