Javascript JS回调链混乱

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

我有以下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.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);
}