我的代码工作正常,但我根本不喜欢。
我想将一个文件拆分为两个文件,一个包含webServices,另一个包含控制器。
我的文件是这样的:
// Load next view
var MainView = Alloy.createController('index').getView('tabGroup');
// this a function call when I click a button "validar" on Validación View.
function btnClick(){
var url = 'www.cocoloco.com/whatever';
var webService = Ti.Network.createHTTPClient({
onload: function(e){
// open new view
MainView.open();
// close actual view
$.tabValidacion.close();
$.tabValidacion = null;
},
onerror: function(e){
alert('onerror: ' + e.error);
},
timeout: 5000
});
webService.open('POST', url);
webService.send();
}
但我想在下面做这样的事情(分为两个文件:webServices.js -library-和validation.js -controller - )。
问题是我总是有消息“错误”,因为我传递了“success = webServices.protocol();”但只要它是“异步”,它就不会停止并转到下面的代码行而没有服务器答案。
exports.protocol = function(){
var url = 'www.cocoloco.com/whatever';
var webService = Ti.Network.createHTTPClient({
onload: function(e){
// on sucess exit with true
return(true);
},
onerror: function(e){
alert('onerror: ' + e.error);
// on sucess exit with false
return(false);
},
timeout: 5000
});
webService.open('POST', url);
webService.send();
}
// Load next view
var MainView = Alloy.createController('index').getView('tabGroup');
function btnClick(){
var webServices = require('webServices');
var success = webServices.protocol();
if(success){
// open new view
MainView.open();
// close actual view
$.tabValidacion.close();
$.tabValidacion = null;
}else{
alert('error');
}
}
我考虑过两种可能的选择:
使用承诺。
在“成功”上触发一个新事件并使用该事件运行另一个回调函数(在此函数中,我打开新视图并关闭前一个视图)。
我不知道这个事件是一个文件(库)和另一个(控制器)中的回调函数有多困难
我从未使用过任何这些解决方案,因此我不知道它们有多“好”。
有什么建议吗?
答案 0 :(得分:0)
回调方法在大多数情况下都能正常工作。只需将函数作为参数传递,就可以将包含成功消息中任何内容的对象返回到responseText和status。
<强> webServices.js 强>
exports.protocol = function(callback) {
var url = 'www.cocoloco.com/whatever';
var webService = Ti.Network.createHTTPClient({
onload: function(e){
// on success call callback
callback({ success: true });
},
onerror: function(e){
// on error call callback
callback({ success: false });
},
timeout: 5000
});
webService.open('POST', url);
webService.send();
}
<强> Validacion.js 强>
function btnClick(){
var webServices = require('webServices');
webServices.protocol(function(e) {
if(e.success){
// open new view
MainView.open();
// close actual view
$.tabValidacion.close();
$.tabValidacion = null;
} else {
alert('error');
}
});
}