I 폰갭 API를 사용하여 ST /의 ExtJS 다음 코드 믹스를 가지고 있지만, 이것은 일반적인 자바 스크립트 질문 :JS 콜백 체인 혼란
내 양식에 저장 버튼 내가이 메소드를 호출 도청 :
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에서 폰갭 파일 전송 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);
}
성공, I는 서버의 응답을 잡고 내가 돌아 오는 길에 내 초기 방법에 문제가
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
}
내 로컬 데이터 저장소에 쓸 수 있도록 FILE_NAME을 잡을 이렇게하려면 응답 변수를 다시 onSavePush 메서드에 전달해야합니다. 어떻게해야합니까? 어떻게 든 콜백 체인이나 그런 것들을 설정해야한다고 생각합니까? 그레지!
Danke Schoen! 그것은 저를 위해 작동합니다 (나는 해결책이 명백하다는 것을 알았습니다!)! 그리고 네, 내 onSavePush 메서드에서 응답이 필요한 이유가 있습니다. 절차 적 솔루션이 마음에 들지는 않지만 내 앱의 프로토 타입을 빨리 꺼내는 것은 빠르고 간결한 방법 인 것으로 보입니다. 나는 길 아래로 싱글 톤을 시도 할 것이다. –