ExtJS如何在一个请求中提交表单和商店?

时间:2013-04-11 14:46:48

标签: php ajax extjs datagrid extjs4

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

现在我不知道什么是好/最佳做法。我尝试使用grid`s store的sync方法,并将表单(表单B)值包含为extraParams。这是有效的,但有可能在成功请求后我需要用相同的(未触摸的)商店做另一个请求(只有表格B更改),所以我将不得不重置记录状态。 (同步仅执行更改)

也许一个简单的Ext.ajax.request()会对这个工作,但如何通过商店?我可以添加表格B值作为参数,但我不知道如何添加商店?我是否需要将自己的每个记录项添加到params配置中?

info:服务器端是php,db是mysql

2 个答案:

答案 0 :(得分:1)

{// 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']);

获取商店数据

答案 1 :(得分:1)

如果表格B值是有关记录的详细信息,请扩展模型以包含这些字段,并且不要在网格视图中显示它们。
然后,表单B中的每个更改都会导致更改记录字段,从而导致更新。