ExtJS Всплывающее окно Загрузка данных формы - PullRequest
0 голосов
/ 15 января 2012

Я использую панель Grid. Когда я выбираю строку в сетке, я получаю следующие результаты:

  • Если я отрисовываю форму в 'document.body', все в порядке, и форма поля заполнены.
  • Если я, одна и та же форма запускается на панели «Окно», поля формы пусты.
  • Когда я использую оба, форма, которая отображается в 'document.body' закрыты, а поля формы в окне заполнены.

Где я ошибаюсь.

// 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"}]}

Ответы [ 2 ]

0 голосов
/ 16 января 2012

Я выяснил, что при вызове load в форме ExtJS пытается получить доступ к элементу form dom, чтобы определить форму method.Я нашел 2 решения:

  1. Добавить method в форму конфигурации
  2. Загрузить данные в форму после отображения окна

Вот коддля второго решения:

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();
0 голосов
/ 16 января 2012

Я бы предложил следующие изменения в коде:

  1. Вместо использования свойства id в TextField (скажем, id: 'subject') используйте свойство name (name: 'subject')
  2. Просто любопытно .... так как вы обрабатываете событие rowselect в сетке, вы можете загрузить выбранную запись в панель формы, а не загружать ее снова. Если это так, то вы можете вызвать метод loadRecord () на панели формы и передать ему объект записи, а затем вызвать метод show () в окне
...