2017-02-22 5 views
0

Moin,Cordova/Javascript: Methode als Rückruffunktion

Ich fühle mich ein wenig dumm. Ich versuche, die folgende Funktion in die Methoden eines Objekts zu konvertieren:

function listDir(path){ 
    window.resolveLocalFileSystemURL(path, 
    function (fileSystem) { 
     var reader = fileSystem.createReader(); 
     reader.readEntries(
     function (entries) { 
      console.log(entries); 
     }, 
     function (err) { 
      console.log(err); 
     } 
    ); 
    }, function (err) { 
     console.log(err); 
    } 
); 
} 

Quelle: Cordova list all files from application directory (WWW)

Aber jeder Art, wie ich es versuchen nicht funktioniert. Ich weiß nicht, wie man die Methoden als Callback-Funktion verwendet, insbesondere wie man die Argumente der Funktion setzt. Mit meinem Code erwarte ich, dass die Ausgabe:

debug: listdir 
debug: filesystem 
debug: entries 
[Array or something] 

Aber ich gerade:

debug: listdir 
debug: filesystem 

Die Übersicht zeigt meinen Code:

function Filelist() {} 

Filelist.prototype = { 
    methodErr: function (err) { 
     console.log('debug: error'); 
     console.log(err); 
    }, 
    methodEntries: function (entries) { 
     console.log('debug: entries'); 
     console.log(entries); 
    }, 
    methodFilesystem: function (fileSystem) { 
     console.log('debug: filesystem'); 
     var reader = fileSystem.createReader(); 
     reader.readEntries(this.methodEntries, this.methodErr); 
    }, 
    methodListDir: function (path) { 
     console.log('debug: listdir'); 
     window.resolveLocalFileSystemURL(
      path, 
      this.methodFilesystem, 
      this.methodErr 
     ); 
    } 
} 


fl = new Filelist(); 
$('.klicken').click(function() { 
    fl.methodListDir(cordova.file.applicationDirectory); 
}); 

Wo ist der Fehler?

Vielen Dank im Voraus!

Jan

Antwort

0

ich habe die Lösung:

Ich habe dies in der Callback-Methode zu binden:

...  
    reader.readEntries(this.methodEntries.bind(this), this.methodErr.bind(this)); 
... 
    window.resolveLocalFileSystemURL(
     path, 
     this.methodFilesystem.bind(this), 
     this.methodErr.bind(this) 
     ); 
... 

Jetzt funktioniert es :)

Verwandte Themen