想象两个表单和一个网格。形式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中的每个更改都会导致记录字段的更改,因此会进行更新。