2013-07-17 5 views
1

Я пытаюсь отправить форму с помощью метода поста, который открывает URL-адрес в новом окне с помощью standardSubmit в ExtJS 4.2.1ExtJS 4.2.1 не представляет форму, используя standardSubmit

Ошибки выбрасываются EXT- все-debug.js в GetFields функционировать

getFields: function() { 
    return this.monitor.getItems(); 
}, 

неперехваченного TypeError: Невозможно вызвать метод 'GetItems' нулевой

Здесь монитора объекта отображается как нуль.

При нажатии на ссылку открывается окно сообщения, которое содержит форму. В поле «Да» нажмите, форма должна быть отправлена ​​с открывшимся новым окном.

моя форма:

initComponent: function() { 
    var me = this; 

    Ext.applyIf(me, { 
     items: [ 
     { 
      xtype: 'form', 
      flex: 1, 
      itemId: 'importForm', 
      layout: { 
       align: 'center', 
       type: 'vbox' 
      }, 
      bodyPadding: 20, 
      standardSubmit: true, 
      items: [ 
      { 
       xtype: 'hiddenfield', 
       itemId: 'user_id', 
       fieldLabel: 'Label', 
       name: 'user_id' 
      }, 
      { 
       xtype: 'label', 
       itemId: 'formLabel', 
       padding: 5, 
       text: 'My Label' 
      }, 
      { 
       xtype: 'container', 
       margin: '10 0 0 0', 
       layout: { 
        align: 'middle', 
        pack: 'center', 
        type: 'hbox' 
       }, 
       items: [ 
       { 
        xtype: 'button', 
        itemId: 'btnImport', 
        margin: '20 0 0 0', 
        width: 75, 
        text: 'Yes' 
       }, 
       { 
        xtype: 'button', 
        cls: 'btn-no', 
        itemId: 'btnCancel', 
        margin: '0 0 0 10', 
        width: 75, 
        text: 'No' 
       }] 
      }] 
     }] 
    }); 

код для отправки формы является:

me.form.getForm().doAction('standardsubmit',{ 
    target : '_blank', 
    method : 'POST', 
    standardSubmit:true, 
    url : 'http://www.mysite.com' 
}); 

точно такие же код работает в ExtJS 4.1.3, но показывает ошибку в 4.2.1

Является ли это ошибкой или что-то не так с моим кодом ???

+0

вы пробовали делать регулярный метод formPanel.submit? – dbrin

ответ

8

Обнаружена причина ошибки. В коде ниже представления формы было заявление, которое закрыло окно, в котором было исключено исключение.

me.form.getForm().doAction('standardsubmit',{ 
    target : '_blank', 
    method : 'POST', 
    standardSubmit:true, 
    url : 'http://www.mysite.com' 
}); 
me.abstractcomponent.close(); <----- THIS CAUSED THE ERROR 

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

Добавление SetTimeout() событие сделал трюк:

setTimeout(function(){me.abstractcomponent.close();},500); 

надеюсь, что его полезным для кого-то еще тоже !!!

3

Это было полезно при определении проблемы. Проблема заключается в том, что объект формы уничтожается до запуска асинхронного запроса. Лучший способ справиться с этой проблемой - добавить обработчики запросов, чтобы форма могла быть уничтожена сразу после ответа ответа.

form.submit({ 
    success: function(form, action) { 
     yourcomponent.close();//or destroy(); 
    }, 
    failure: function(form, action) { 
     yourcomponent.close();//or destroy(); 
    } 
}); 

http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.form.Basic

Смежные вопросы