ExtJS如何在一个请求中提交表单和存储


ExtJS How to submit a form and a store at one request?

想象两个表单和一个网格。形式A由comboxes组成。方框显示来自数据库的数据。用户选择组合框,结果是网格存储的新记录。还可以将新值/记录放入组合框中。(无数据库插入)表单B由几个文本字段组成。这是一种MasterDetail。Grid是Master, Form B是Detail。最后,我想提交表单B和网格的存储在一个请求(ajax)。在服务器端,我想存储详细数据,并将它们与现有记录连接,甚至创建新记录并连接它们。我想在事务上下文中运行这些操作。

现在我不知道什么是好的/最好的做法。我尝试使用网格存储的同步方法,并将表单(表单B)值作为extraParams。这是有效的,但它是可能的,成功的请求后,我需要做另一个请求与相同的(未触及的)存储(仅形式B的变化),所以我将不得不重置记录状态。(sync只执行更改)

也许一个简单的Ext.ajax.request()将工作,但如何传递存储?我可以添加形式B值作为参数,但我不知道如何添加存储?我是否需要将每个记录项添加到我自己的参数配置?

{// form submit button
            id: 'save-frm',
            text: 'Save',
            handler: function(btn) {
                //btn.setDisabled(true);
                frm = this.up('form').getForm();
                if(frm.isValid()){
                    var store_data = new Array();
                    your_store.each(function(node){
                            store_data.push(JSON.stringify({id: node.data.id, name: node.data.name}))
                    })
                     frm.submit({
                          waitMsg: 'Enregistrement en cours...',
                          submitEmptyText: false, 
                          params:{store_data: JSON.stringify(store_data)}, 
                          success: function(form, action){
                                //
                          },
                         failure: function(form, action){                           
                             //
                         }
                    });
                }
            }
 }

您可以将您的存储数据作为提交表单的参数发送或者使用Ajax.request在PHP端,使用$store_data = json_decode($_POST['store_data']);

获取存储数据

如果Form B值是关于记录的详细信息,则扩展Model以包含这些字段,并且不将它们显示在网格视图中。
然后,表单B中的每个更改都会导致记录字段的更改,因此会进行更新。