全球不承认: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.我会认为编辑问题时是一个错字。 –