Javascript JS回调链混乱
我有以下ST/ExtJS与Phonegap API的混合代码,但这是一个更一般的Javascript问题: 点击表单上的“保存”按钮时,我调用此方法:Javascript JS回调链混乱,javascript,extjs,callback,cordova,Javascript,Extjs,Callback,Cordova,我有以下ST/ExtJS与Phonegap API的混合代码,但这是一个更一般的Javascript问题: 点击表单上的“保存”按钮时,我调用此方法: onSavePush: function(button) { var form = button.up('panel'), //get the record record = form.getRecord(), //get the form values values = form.get
onSavePush: function(button) {
var form = button.up('panel'),
//get the record
record = form.getRecord(),
//get the form values
values = form.getValues();
//if a new push
if(!record){
var newRecord = new EvaluateIt.model.SiteEvaluation(values);
Ext.getStore('SiteEvaluations').add(newRecord);
}
//existing push
else {
record.set(values);
}
form.hide();
// assemble record
//assemble_evaluation(record);
initialize_image_post(record, values);
// add file_name update to store here:
},
函数initialize_image_post()执行它所说的操作(设置API url并获取uri引用):
然后调用函数post_image()中的Phonegap文件传输API
成功后,我从服务器抓取响应并获取文件名,这样我就可以将其写入本地数据存储,回到初始方法
function post_success(r) {
console.log("Code = " + r.responseCode);
console.log("Response = " + r.response);
console.log("Sent = " + r.bytesSent);
alert(r.response);
var response = Ext.JSON.decode(r.response),
file_name = response.imageData.file_name;
alert(file_name);
// somehow get file_name back up to onSavePush method
}
问题是,要做到这一点,我需要将响应变量返回到onSavePush方法。我该怎么做?我想我需要建立一个回调链或类似的东西?格拉齐 我想你是故意想在你的
onSavePush
方法中得到响应,对吧?然后,使用过程式编程,解决方案是在onSavePush
中定义post\u success
回调并向下传递:
onSavePush: function(button) {
// bablabla
var post_success = function(r) {
// bablabla or "add file_name update to store here"
}
initialize_image_post(record, values, post_success);
}
function initialize_image_post(record, values, callback) {
// bablabla
post_image(uri, url, callback);
}
function post_image(imageUri, url, post_success) {
// bablabla
ft.upload(imageUri, encodeURI(url), post_success, post_error, options);
}
在理想情况下,您可以设计一个类/单例,它将关注发布图像、成功触发事件,因此您可以在
onSavePush
中为其附加一次性事件处理程序,我猜您是有意在onSavePush
方法中获得响应的,对吗?然后,使用过程式编程,解决方案是在onSavePush
中定义post\u success
回调并向下传递:
onSavePush: function(button) {
// bablabla
var post_success = function(r) {
// bablabla or "add file_name update to store here"
}
initialize_image_post(record, values, post_success);
}
function initialize_image_post(record, values, callback) {
// bablabla
post_image(uri, url, callback);
}
function post_image(imageUri, url, post_success) {
// bablabla
ft.upload(imageUri, encodeURI(url), post_success, post_error, options);
}
在理想情况下,您可以设计一个类/单例,它将关注发布图像、成功触发事件,因此您可以在您的
onSavePush
Danke Schoen中将一次性事件处理程序附加到它!这对我来说很有效(我知道解决方案是显而易见的。是的,在onSavePush方法中需要响应是有原因的。虽然我不喜欢程序化的解决方案,但它似乎是一种快速而肮脏的方法,可以让我的应用程序原型走出家门。我将尝试一个单身汉,虽然在路上。丹克学校!这对我来说很有效(我知道解决方案是显而易见的。是的,在onSavePush方法中需要响应是有原因的。虽然我不喜欢程序化的解决方案,但它似乎是一种快速而肮脏的方法,可以让我的应用程序原型走出家门。我会尝试一个单身汉,虽然在路上。
onSavePush: function(button) {
// bablabla
var post_success = function(r) {
// bablabla or "add file_name update to store here"
}
initialize_image_post(record, values, post_success);
}
function initialize_image_post(record, values, callback) {
// bablabla
post_image(uri, url, callback);
}
function post_image(imageUri, url, post_success) {
// bablabla
ft.upload(imageUri, encodeURI(url), post_success, post_error, options);
}