1

我刚刚开始使用 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

4

3 回答 3

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

希望这可以帮助

于 2012-07-10T14:21:32.943 回答
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.');
            }
于 2012-07-10T13:40:25.863 回答
0

制作两种方法,这些方法确实有用。一个是 showPageLoadMessage,另一个是 hidePageLoad 消息,在发送请求调用 show 和响应收到调用 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 块中,因为即使出现问题或您错误地调用消息两次,您的事情也会继续进行。

于 2012-07-10T21:11:55.000 回答