2012-01-15 6 views
0

Я использую панель сетки. Когда я выбираю строку в сетке я получаю следующие результаты:Всплывающее окно ExtJS Загрузка данных формы

  • Если я сделать форму в «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"}]} 

ответ

0

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

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

Я понял, что когда 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(); 
Смежные вопросы