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