从其他方法运行私有方法

时间:2013-09-04 16:45:34

标签: javascript cordova

我使用以下代码初始化类ReadConfig

var myReadConfig = new ReadConfig();

此工作正常,alert("2")出现。

之后我运行调用方法window.requestFileSystem(...)的语句gotFSReader。 但我从未见过alert("3");结果。

如何从gotFSReader中运行此方法window.requestFileSystem(...)?如果我在课外运行它完全有效......

我的班级:

  var ReadConfig = function(){
        var path = "Zugangsdaten.txt";
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFSReader, failReader);
        alert("2");

        var gotFSReader = function(fileSystem) {
            alert("3");
            fileSystem.root.getFile(path, null, gotFileEntryReader, failReader);

        }

        var gotFileEntryReader = function(fileEntry) {
            fileEntry.file(gotFileReader, failReader);
            alert("4");
        }

        var gotFileReader = function(file){
            readAsText(file);
        }

        var readAsText = function(file) {
            var reader = new FileReader();
            reader.onloadend = function(evt) {
                console.log("Read as text");
                handleLocalPasswort(evt.target.result);
            };
            reader.readAsText(file);
        }

        var failReader = function(evt) {
            console.log(evt.target.error.code);
        }

        var handleLocalPasswort = function(fileStr){
            if(fileStr=="" || fileStr == null){
                return;
            }

            var arrayItems = fileStr.split(";");
            document.getElementById('tb_benutzer').value = arrayItems[0];
            document.getElementById('tb_password').value = arrayItems[1];
            document.getElementById('tb_knr').value = arrayItems[2];
            checkLogin();

        }
    }

1 个答案:

答案 0 :(得分:1)

您的代码结构不正确。您没有初始化该变量(“gotFSReader”),直到之后将值传递给该函数。因此,您正在传递undefined,而不是对函数的引用。

在初始化之后移动window.requestFileSystem()调用,或者用函数声明语句声明函数:

    function gotFSReader(fileSystem) {
        alert("3");
        fileSystem.root.getFile(path, null, gotFileEntryReader, failReader);
    }

如果你这样做,那么它就会起作用,因为函数声明语句总是被视为它们出现在包含函数的开头。

变量声明也被提升,但是有区别:只有var语句的实际声明部分被视为在函数开始时发生。初始化是在var实际出现的函数中完成的。因此,在您的代码中,名为“gotFSReader”的变量在您调用requestFileSystem()时声明 ,但它尚未初始化。