Cordova / Javascript:作为回调函数的方法

时间:2017-02-22 00:14:05

标签: javascript cordova methods callback arguments

莫因,

我觉得有点愚蠢。我尝试将以下函数转换为对象的方法:

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);
    }
  );
}

来源:Cordova list all files from application directory (WWW)

但是我尝试的任何方式都行不通。我不知道如何使用这些方法作为回调函数,尤其是如何设置函数的参数。使用我的代码我期望输出:

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

但我得到:

debug: listdir
debug: filesystem

这是我的代码:

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);
});

错误在哪里?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我有解决方案:

我必须在回调方法中绑定它:

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

现在有效:)