在sencha触摸表格中加载面具提交

时间:2012-07-10 11:52:53

标签: android extjs cordova sencha-touch sencha-touch-2

我刚刚开始用sencha touch构建应用程序2我试图提交一个我现在做的,我想在提交表单时显示加载掩码。我该怎么做?我尝试了几种方法没有取得成功。

Ext.define('AddressBook.view.Login', {
    extend: 'Ext.form.Panel',
    xtype: 'login',
    requires: ['Ext.form.*'],
    config: {
        xtype: 'formpanel',
        title: '<img src="resources/images/logo.png" width="180px"/>  ',
        iconCls: 'user',
        layout: 'vbox',
        style: 'border:none;',
        items: [
    {
            xtype: 'fieldset',
            title: 'Service Seeker Login',
            scrolable: true,
            items: [{
                xtype: 'emailfield',
                name: 'useremail',
                placeHolder: 'Username or Email',
                allowBlank: false
            }, {xtype:'spacer',  style: 'background-color: #EEE; height:20px; border:none;'}, {
                xtype: 'passwordfield',
                name: 'password',
    placeHolder: 'Password',
                allowBlank: false
            },{xtype:'spacer',  style: 'background-color: #EEE; height:20px; border:none;'},{
            xtype: 'checkboxfield',
            name : 'Remember',
           labelWidth: '80%' ,
            label: 'Remember me',
            value: 'remember'
        }, {
                xtype: 'hiddenfield',
                name: 'type',
                value: 'user'
            }]
        }, {
            xtype: 'button',
            text: 'LOGIN',
        id: 'LoginButon',
            ui: 'confirm',
            width: '75px',
            handler: function () {
     //iniate loading screen for user
    var myMask = new Ext.LoadMask(Ext.getBody(), {msg:"Please wait..."});
                var form = this.up('formpanel');
                var values = form.getValues();
                if (values.useremail && values.password) {
                    form.submit({
                   url: 'http://mysite/mobilelogin',
                        method: 'POST',
                        success: function (form, result) {
                            if (result.go) {
            myMask.show();
            localStorage.setItem('userName',values.useremail);
                                var indexPanel = Ext.create('AddressBook.view.Contacts');
            Ext.Viewport.add(indexPanel);
            Ext.Viewport.setActiveItem(indexPanel,{type: 'slide', direction: 'right'});
                            }
                        },
                        failure: function (form, result) {
                            Ext.Msg.alert('', result.message);
                        }
                    });
                } else {
                    Ext.Msg.alert('Error', 'Both username and password are required.');
                }
            }
        }
        }]
});

我也在sencha网站上发布了这个。 http://www.sencha.com/forum/showthread.php?190430-Simple-Form-example-with-Ajax-or-Connection-to-backend&p=851571#post851571

3 个答案:

答案 0 :(得分:4)

这通常是我这样做的:

Ext.Viewport.mask({ xtype: 'loadmask' });

Ext.Ajax.request({
  ...
  success: function(response, opts) {
    Ext.Viewport.unmask();
  },
  failure: function(response, opts) {
    Ext.Viewport.unmask();
    // handle error
  }
});

希望这有帮助

答案 1 :(得分:1)

试试这段代码

if (values.useremail && values.password) {
 Ext.Viewport.setMasked({
                      xtype: 'loadmask',
                     message: 'Loading....'
          });
                form.submit({
               url: 'http://mysite/mobilelogin',
                    method: 'POST',
                    success: function (form, result) {
                         Ext.Viewport.setMasked(false);        
                        if (result.go) {
        myMask.show();
        localStorage.setItem('userName',values.useremail);
                            var indexPanel = Ext.create('AddressBook.view.Contacts');
        Ext.Viewport.add(indexPanel);
        Ext.Viewport.setActiveItem(indexPanel,{type: 'slide', direction: 'right'});
                        }
                    },
                    failure: function (form, result) {
                       Ext.Viewport.setMasked(false);        
                        Ext.Msg.alert('', result.message);
                    }
                });
            } else {
                Ext.Msg.alert('Error', 'Both username and password are required.');
            }

答案 2 :(得分:0)

制作两种方法,这些方法确实可用。一个是showPageLoadMessage,另一个是发送请求调用show之前的hidePageLoad消息,并且响应收到后调用hide使用此代码。

方法1

function showPageLoadMessage() {
try {
    Ext.MessageBox.show({
        msg: 'Please wait while your request is served...',
        progressText: 'Loading...',
        width: 300,
        wait: true,
        animate: true,
        waitConfig: {
            interval: 200
        }
    });
    var dlg = Ext.MessageBox.getDialog();
    dlg.center();
} catch (e) {}
}

方法2

function hidePageLoadMessage(rand) {
try {
Ext.MessageBox.hide();  
} catch (e) {}

}

我已经在try catch块中写了它们,因为即使有什么东西坏了,或者你错误地调用了两次消息,你的东西也会继续存在。