我刚刚开始用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
答案 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块中写了它们,因为即使有什么东西坏了,或者你错误地调用了两次消息,你的东西也会继续存在。