全球不承認:Javascript對象成員函數稱爲回調
function FileStore(onsuccess, onfail){
//chain of Phonegap File API handlers to get certain directories
function onGetSupportDirectorySuccess(dir){
//stuff
onsuccess();
}
function getDirectory(dir){
return "something" + dir;
}
}
var onFileStoreOpened = function(){
if (window.file_store instanceof FileStore){
console.log('window.file_store is a FileStore');
console.log(window.file_store.getDirectory('something'));
}
}
var onDeviceReady = function(){
window.file_store = new FileStore(onFileStoreOpened, onFileStoreFailure);
}
在這裏,我想要做一些事情來初始化文件服務爲應用程序,然後在回調中使用它們進行初始化。我收到以下錯誤消息在logcat中:
07-03 06:26:54.942: D/CordovaLog(223): file:///android_asset/www/index.html: Line 40 : window.file_store is a FileStore
07-03 06:26:55.053: D/CordovaLog(223): file:///android_asset/www/cordova-1.8.1.js: Line 254 : Error in success callback: File7 = TypeError: Result of expression 'window.file_store.getDirectory' [undefined] is not a function.
四處移動代碼和getDirectory剝離出來後,一切都(),以確保它是有效的,我甚至不知道我理解的錯誤訊息,這表明對我來說,儘管window.file_store被識別爲FileStore對象,但getDirectory()並不被視爲window.file_store的成員函數。這對我來說毫無意義,所以我想這種解釋是不正確的。任何啓示將不勝感激。
因爲我已經試過如下:
window.file_store = {
app_data_dir : null,
Init: function(onsuccess, onfail){
//chain of Phonegap File API handlers to get directories
function onGetSupportDirectorySuccess(dir){
window.file_store.app_data_dir = dir;
console.log("opened dir " + dir.name);
onsuccess();
}
},
GetDirectory : function(){
return window.file_store.app_data_dir; //simplified
}
}
var onFileStoreOpened = function(){
var docs = window.file_store.getDirectory();
console.log('APPDATA: ' + docs.fullPath);
}
var onDeviceReady = function() {
window.file_store.Init(onFileStoreOpened, onFileStoreFailure);
}
,我得到
D/CordovaLog(224): file:///android_asset/www/base/device.js: Line 81 : opened dir AppData
D/CordovaLog(224): file:///android_asset/www/cordova-1.8.1.js: Line 254 : Error in success callback: File7 = TypeError: Result of expression 'docs' [null] is not an object.
所有我想在這裏做的就是確保存在某些目錄(我已經刪除所有,但一個)當我開始時,保存目錄對象以供將來使用,然後在所有初始化完成後檢索並使用它,並且我不希望全局命名空間中的所有內容都被使用。當然,我希望能夠在必要時使用特定的實例,並且我感到不安,因爲它表明我的理解存在問題,所以我不能這樣做,但我甚至不能理解與單一的全球合作。這是Javascript問題還是Phonegap問題?
我真的不確定是否改變了我的編輯方式,並在第二次嘗試時改變了底層問題,因爲我終於得到了一個不同的錯誤,但在我看來,底層的問題是關於如何使用JS對象模型進行初始化,初始化完成時執行回調,然後訪問已完成的工作。我希望我可以改變標題,使其更清楚。 – chrysanhy
特別是如何做_asynchronous_初始化。 – chrysanhy
var docs = window.file_store.getDirectory();'應該有'GetDirectory',即大寫字母G.我會認爲編輯問題時是一個錯字。 –