1

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 参照を取得します):

function initialize_image_post(record) {

    var uri,
        url;

    // use new API with authorization token
    url =  EvaluateIt.config.protocol;
    url += EvaluateIt.config.test;
    url += EvaluateIt.config.domain;
    // url += EvaluateIt.config.dev; // ev environment
    // url += EvaluateIt.config.file_response;  // needed for POST echo
    url += EvaluateIt.config.apiViewNomination;
    url += EvaluateIt.config.file_upload;
    url += '?token=' + sessionStorage.sessionToken;

    uri = record.data.imageUri; // local path to image

    console.log('uri: ' + uri + 'url: ' + url); 

    post_image(uri, url);
}

次に、関数 post_image() で Phonegap ファイル転送 API を呼び出します。

// Phonegap file transfer
function post_image(imageUri, url) {
    var options = new FileUploadOptions(),
        ft = new FileTransfer();

    options.fileKey = 'userfile';
    //options.fileName = imageUri.substr(imageUri.lastIndexOf('/') + 1);
    options.mimeType = 'image/jpeg';
    options.chunkedMode = false;

    ft.upload(imageUri, encodeURI(url), post_success, post_error, options);
}

成功したら、サーバーからの応答を取得して file_name を取得し、最初の方法でローカル データ ストアに書き込むことができるようにします。

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 メソッドに戻す必要があることです。どうすればいいですか?どうにかしてコールバック チェーンなどを設定する必要があると思いますか? グラジー!

4

1 に答える 1