ExtJS弹出窗口表单数据加载

new9mtju  于 2022-09-26  发布在  其他
关注(0)|答案(2)|浏览(261)

我使用网格面板。当我选择网格中的行时,会得到以下结果:

  • 如果我在文件中提交表格。body'一切正常,表单字段已填充。
  • 如果我在“窗口”面板中启动相同的“窗体”,则“窗体”字段为空。
  • 当我同时使用这两者时,“文档”中呈现的Form。body”关闭,并填充窗口中的Form字段。

我犯错误的地方。

// Grip panel part
sm: new Ext.grid.RowSelectionModel({
        singleSelect: true,
        listeners: {
                    rowselect: function(sm, index, record) {deleteWindow.show();}
                   }
        })  
// End Grid panel part      

var myForm = new Ext.form.FormPanel({
        title:"Basic Form",
        width:425,
        frame:true,
        items: [
            new Ext.form.TextField({
                id:"to",
                fieldLabel:"To",
                width:275,
                allowBlank:false,
                blankText:"Please enter a to address",
                     readOnly: true
            }),
            new Ext.form.TextField({
                id:"subject",
                fieldLabel:"Subject",
                width:275,
                allowBlank:false,
                blankText:"Please enter a subject address",
                readOnly: true
            }),
        ],
        buttons: [
            {text:"Cancel"},
            {text:"Save"}
        ]
    });

var deleteWindow = new Ext.Window({
        id: 'id_deleteWindow',
        title: 'Delete',
        closable:true,
        width: 750,
        height:     380,
        plain:true,
        layout: 'fit',
        items: myForm
});

var id_test = 2;  // This is only for this problem

//myForm.render(document.body);  // When using this code everything is ok, and form fields are filled

myForm.getForm().load({
                url:'ggg.php',
                params:{
                        id: id_test
                         }
});

JSON数据

{success:true,results:[{"id_test":"1","to":"a","subject":"aa"}]}
nnvyjq4y

nnvyjq4y1#

我建议对代码进行以下更改:
1.使用name属性(name:'subject')代替在TextField上使用id属性(例如,id:'substite')
1.只是好奇……因为您正在网格上处理rowselect事件,所以您可能希望在表单面板中加载所选记录,而不是再次加载它。如果是这种情况,则可以在窗体面板上调用loadRecord()方法,并将记录对象传递给它,然后在窗口上调用show()方法

ifsvaxew

ifsvaxew2#

我发现当对表单调用load时,ExtJS会尝试访问form dom元素以确定表单method。我找到了两种解决方案:
1.将method添加到表单配置
1.显示窗口后将数据加载到窗体
下面是第二种解决方案的代码:

var deleteWindow = new Ext.Window({
    id: 'id_deleteWindow',
    title: 'Delete',
    closable:true,
    width: 750,
    height:     380,
    plain:true,
    layout: 'fit',
    items: myForm,
    listeners: {
        show: function() {
            var form = this.items.get(0);
            form.getForm().load({
                url:'ggg.php',
                params:{
                    id: id_test
                }
            });
        }
    }
});
deleteWindow.show();

相关问题