2010-05-21 10 views
5

Mam skrypt, który generuje panel forma:ExtJS - dynamicznego generowania pól w FormPanel

var form = new Ext.FormPanel({ 
    id: 'form-exploit-zombie-' + zombie_ip, 
    formId: 'form-exploit-zombie-' + zombie_ip, 
    border: false, 
    labelWidth: 75, 
    formBind: true, 
    defaultType: 'textfield', 
    url: '/ui/modules/exploit/new', 
    autoHeight: true, 
    buttons: [{ 
     text: 'Execute exploit', 
     handler: function() { 
      var form = Ext.getCmp('form-exploit-zombie-' + zombie_ip); 

      form.getForm().submit({ 
       waitMsg: 'Running exploit ...', 
       success: function() { 
        Ext.beef.msg('Yeh!', 'Exploit sent to the zombie.') 
       }, 
       failure: function() { 
        Ext.beef.msg('Ehhh!', 'An error occured while trying to send the exploit.') 
       } 
      }); 
     } 
    }] 
}); 

że same skrypty następnie pobiera plik json z mojego serwera, który określa, ile pól wejściowych, że forma powinna zawierać. Następnie skrypt dodaje te pola do formularza:

Ext.each(inputs, function(input) { 
    var input_name; 
    var input_type = 'TextField'; 
    var input_definition = new Array(); 

    if(typeof input == 'string') { 
     input_name = input; 
     var field = new Ext.form.TextField({ 
       id: 'form-zombie-'+zombie_ip+'-field-'+input_name, 
       fieldLabel: input_name, 
       name: 'txt_'+input_name, 
       width: 175, 
       allowBlank:false 
      }); 
     form.add(field); 
    } 
    else if(typeof input == 'object') { 
     //input_name = array_key(input); 

     for(definition in input) { 
      if(typeof definition == 'string') { 

      } 
     } 
    } else { 
     return; 
    } 
}); 

Wreszcie formularz jest dodawane do odpowiedniego panelu w moim interfejsu:

panel.add(form); 
panel.doLayout(); 

Problem mam jest: kiedy wysłać formularz przez kliknięcie przycisku, żądanie http wysłane do mojego serwera nie zawiera pól dodanych do formularza. Innymi słowy, nie publikuję tych pól na serwerze.

Ktoś wie, dlaczego i jak mogę to naprawić?

Odpowiedz

9

problem jest tutaj:

id: 'form-exploit-zombie-'+zombie_ip, 
formId: 'form-exploit-zombie-'+zombie_ip, 

co robisz, że jesteś ustawienie atrybutu id panel formularza i atrybut id formularza (tag formularza) do tej samej wartości. Co oznacza, że ​​masz dwa elementy o tym samym id i że jest źle.

Wystarczy usunąć tę linię

formId: 'form-exploit-zombie-'+zombie_ip, 

i powinno być w porządku.

+0

kocham cię. dzięki. – Benjamin

+0

@Benjamin: Nie ma problemu. –

0

Czy sprawdziłeś parametr Żądanie HTTP dla wartości formularza?

Jeśli strona serwera znajduje się w PHP, co otrzymujesz z odpowiedzi, przekazując dowolną nazwę pola? Na przykład, jeśli jeden z nazwą wejściowego był „xyz” co masz przez

$_POST[ 'txt_xyz' ] 
+0

Tak, sprawdziłem. – Benjamin