Extjs - динамически генерировать поля в FormPanel - PullRequest
5 голосов
/ 21 мая 2010

У меня есть скрипт, который генерирует панель формы:

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.')
                }
            });
        }
    }]
});

те же самые сценарии затем получают файл json с моего сервера, который определяет, сколько полей ввода должна содержать эта форма. Затем скрипт добавляет эти поля в форму:

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;
    }
});

Наконец, форма добавляется в соответствующую панель в моем интерфейсе:

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

Проблема, с которой я столкнулся, заключается в следующем: когда я отправляю форму, нажав на кнопку, http-запрос, отправляемый на мой сервер, не содержит полей, добавленных в форму. Другими словами, я не публикую эти поля на сервере.

Кто-нибудь знает, почему и как я мог это исправить?

Ответы [ 2 ]

9 голосов
/ 21 мая 2010

Ваша проблема здесь:

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

То, что вы делаете, это то, что вы устанавливаете атрибут id панели формы и атрибут id формы (тег формы) в одно и то же значение. Это означает, что у вас есть два элемента с одинаковым идентификатором, и это неправильно.

Просто удалите эту строку

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

и с тобой все будет в порядке.

0 голосов
/ 21 мая 2010

Проверяли ли вы параметр HTTP-запроса для значений формы?

Если вы на стороне сервера на PHP, что вы получите от ответа, передавая любое имя поля? Например, если одно из ваших входных имен было «xyz», что вы получите по

$_POST[ 'txt_xyz' ]
...