2017-02-20 5 views
1

У меня есть форма, что я Подавать с успехом и провалом обратных вызовов:Форма в ExtJS 6

Вид:

Ext.define('App.view.CommentForm', { 
    extend: 'Ext.form.Panel', 
    alias: 'widget.ship-commentForm', 
    url: 'addcomment.php', 
    items: [{ 
     xtype: 'textarea', 
     fieldLabel: 'Comment', 
     name: 'text', 
     allowBlank: false, 
     maxLength: 1000 
    },{ 
     xtype: 'textfield', 
     fieldLabel: 'User name', 
     name: 'username', 
     readOnly: true 
    }], 
    fbar: [{ 
     text: 'Save', 
     formBind: true, 
     itemId: 'submit' 
    }] 
}) 

И контроллер:

Ext.define('App.controller.MyController', { 
    init: function(){ 
     this.control({ 
      'ship-commentForm button#submit': {click: this.onFormSubmit}, 
... 
    onFormSubmit: function(btn){ 
     var form = btn.up('form').getForm(), 
     me = this, 
     values = form.getValues(); 
     form.submit({ 
      success: function(form, action){ 
       console.log('success') 
      }, 
      failure: function(form, action){ 
       console.log('failure') 
      } 
     }) 
     setTimeout(function(){btn.up('window').close()}, 100) 
    }, 

В то время как это работает отлично в ExtJs4, в ExtJs6, форма отправляется так, как должна, но обратные вызовы успеха и отказа больше не вызываются. Это должно по-прежнему работать в соответствии с the documentation of submit().

N.B. В откликается сервер содержит действительный JSON строку:

{"success":true,"msg":"Comment saved"} 

Edit: я добавил код в контроллере, который я подозреваю, является вопрос: setTimeout(btn.up('window').close(), 100)

+0

Я сделал образец скрипку, чтобы проверить вашу проблему, и это работает отлично на моей скрипке https://fiddle.sencha.com/#view/editor&fiddle/1qjr –

+0

@SuryaPrakashTumma Спасибо. Мне также удалось заставить его работать в скрипке https://fiddle.sencha.com/#view/editor&fiddle/1qjq всего несколько минут назад. Я еще не уверен, где проблема. –

+0

Не было бы лучшей идеей вызывать метод '.close()' в обратном вызове успеха 'form.submit'? Или это какое-то требование? – qmateub

ответ

4

Вместо того чтобы закрыть окно с setTimeout, сделать это в вашем успешном обратном вызове form.submit(). Он должен решить вашу проблему.

form.submit({ 
    success: function(form, action){ 
     btn.up('window').close() 
    }, 
    failure: function(form, action){ 
     console.log('failure') 
    } 
})