2

私は Sencha touch で作業していて、webdb からデータを取得した後にパネルを更新しようとしています...これは難しいとは思いませんが、ここに何かが完全に欠けています...

var returnHTML = getPresentations();

function getPresentations() {
returnHTML = "<ul>";

db = openDatabase("myDB", "", "TheDB", 500000);     
db.transaction(
    function (tx) {
        tx.executeSql("SELECT title FROM Presentations",
            [],
            function (transaction, results) {
                var returnHTML = "<ul>";
                for (var i = 0; i < results.rows.length; i++) {
                    returnHTML += "<li>" + results.rows.item(i).title + '</li>';
                }
                returnHTML += "</ul>";
            },
            onError);
    },
        onTransactError,
        onTransactSuccess);
}

function onTransactSuccess() {
    alert(returnHTML);
    console.log(returnHTML);
    extPanel.update();
}

しかしreturnHTML、未定義として戻ってきます...ここで何が起こっているのかよくわかりません。

私はそれが私のSELECT関数を通過するのを見ます...それが完了する前の完全な文字列です。私は何が欠けていますか?

4

3 に答える 3

5

ここにはいくつかの問題があります。1つ目は範囲の問題です。キーワードreturnHTMLを使用して、関数のスコープ内で新しいを作成しています。var関数内のキーワードを削除してvar、以前に作成したインスタンスを設定するようにしますreturnHTML

これ:

var returnHTML = "<ul>";

次のようにする必要があります。

returnHTML = "<ul>";

さらに、実際にはreturnHTML関数からの値を返していないようです。return returnHTML関数の最後に追加するだけです。

...
},
        onTransactError,
        onTransactSuccess);

    //Add this line
    return returnHTML;
}
于 2011-10-31T16:40:06.553 に答える
0

getPresentations最初の行で、の結果をに割り当てていますreturnHTML。ただし、この関数から値を返さないため、結果はになりundefinedます。

したがって、関数を呼び出して結果をグローバル変数に設定する(つまり、割り当てを削除する)か、関数から結果を返して割り当てます(つまりreturn、関数にステートメントを追加します)。

于 2011-10-31T16:43:14.590 に答える
0

この行も変更する必要があるかもしれないと思います。

returnHTML += "<li>" + results.rows.item(i).title + '</li>';

returnHTML += "<li>" + results.rows.item(i).title + "</li>";

この場合、二重引用符と単一引用符は異なる意味を持つと思います。

一貫性を保つために何かあれば。

于 2011-10-31T16:46:36.363 に答える