Моя глобальная переменная выглядит как неопределенная в обратном вызове transcationSuccess - не могу понять, почему - PullRequest
2 голосов
/ 31 октября 2011

Я работаю с 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 ... ее завершенная строка до ее завершения. Чего мне не хватает?

Ответы [ 3 ]

5 голосов
/ 31 октября 2011

Здесь есть несколько проблем. Первый - это вопрос объема. Вы создаете новый returnHTML в рамках своей функции, используя ключевое слово var. Удалите ключевое слово var внутри своей функции, чтобы установить ранее созданный экземпляр returnHTML

Это:

var returnHTML = "<ul>";

Должно быть:

returnHTML = "<ul>";

Кроме того, похоже, что вы на самом деле не возвращаете значение returnHTML из своей функции. Просто добавьте return returnHTML в конец вашей функции.

...
},
        onTransactError,
        onTransactSuccess);

    //Add this line
    return returnHTML;
}
0 голосов
/ 31 октября 2011

Я думаю, что эта строка также может нуждаться в изменении.

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

Для

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

Как я думаю, двойные кавычки и одинарные кавычки в этом случае будут иметь разные значения.

Если уж на то пошло, чтобы оно было постоянным.

0 голосов
/ 31 октября 2011

В первой строке вы присваиваете результат getPresentations для returnHTML.Но вы не возвращаете значение из этой функции, поэтому результат равен undefined.

. Поэтому либо вызовите функцию для установки результата в глобальную переменную (т.е. удалите присвоение), либо верните результатиз функции и назначьте ее (т.е. добавьте оператор return в функцию).

...