HTML5 SQLite Db вопросы - PullRequest
       4

HTML5 SQLite Db вопросы

1 голос
/ 26 января 2012

У меня есть пара вопросов относительно реализаций Sqlite для веб-сайта HTML5.

Прежде всего, я пытаюсь использовать Синхронную базу данных, вызывая метод openDatabaseSync, но, похоже, он не работает ... Кто-то уже использовал его и может мне помочь?

Кроме того, я немного пытаюсь обработать результат, возвращаемый моим запросом к базе данных.Я бы хотел, чтобы моя функция возвращала массив книг, например:

function searchByKeywordId(kw_id, element) {
    cleanSearch();
    element.innerHTML = "No result...";
    var books = new Array();

    db.transaction(function (tx) {
        tx.executeSql("SELECT b.BK_TITLE,b.BK_URL, b.BK_THUMBNAIL_URL FROM KEYWORDS k INNER JOIN CATALOG_ITEMS c on k.KW_ID = c.KW_ID INNER JOIN BOOKS b on c.BK_ID = b.BK_ID  WHERE k.KW_ID = ? GROUP BY b.BK_TITLE,b.BK_URL",[kw_id], function (tx, results) {
            if (results.rows.length > 0) {
                var html = "";
                for (var i = 0; i < results.rows.length; i++) {
                    var bookId = results.rows.item(i).BK_ID;
                    var bookUrl = results.rows.item(i).BK_URL;
                    var bookTitle = results.rows.item(i).BK_TITLE;
                    var bookThumbnailUrl = results.rows.item(i).BK_THUMBNAIL_URL;
                    var book = new Book(bookId,bookTitle,bookUrl,bookThumbnailUrl);
                    books.push(book);

                    /*html += "<div class='x_container' id='calibre:book:" + bookId + "'>";
                    html += "<div class='cover'>";
                    html += "</div></div>";*/
                    html += "<a href='" + bookUrl + "' title=\"" + bookTitle + "\" target='_new'><img src='" + bookThumbnailUrl + "'></a> &nbsp;";
                     }
                //html += "</div>";
                element.innerHTML = html;
            }
        });
    });

    return books; }

. Очевидно, что добавление книг в методы обратного вызова не работает ... Вы видите способ, которым я мог бы этого достичь?Чтобы мне не пришлось писать в документе методы моей базы данных ...

Спасибо!

1 Ответ

0 голосов
/ 04 февраля 2012

В stackoverflow вопрос с javascript и «не работает» в нем обычно является отсутствующим пареном :) Однако я не нашел такого в вашем коде. Я вижу подозрительный синтаксис около

,[kw_id],   << did we really mean an array here, or are we de-referencing something...

В любом случае, если это не ошибка, я бы начал с упрощения, а не с многоцелевого использования ваших функций.

function searchByKeywordId(kw_id, element) {
    cleanSearch();
    var books = new Array();

    db.transaction(function (tx) {
        tx.executeSql("SELECT b.BK_TITLE,b.BK_URL, b.BK_THUMBNAIL_URL FROM KEYWORDS k INNER JOIN CATALOG_ITEMS c on k.KW_ID = c.KW_ID INNER JOIN BOOKS b on c.BK_ID = b.BK_ID  WHERE k.KW_ID = ? GROUP BY b.BK_TITLE,b.BK_URL",[kw_id], function (tx, results) {
            if (results.rows.length > 0) {
                var html = "";
                for (var i = 0; i < results.rows.length; i++) {
                    var bookId = results.rows.item(i).BK_ID;
                    var bookUrl = results.rows.item(i).BK_URL;
                    var bookTitle = results.rows.item(i).BK_TITLE;
                    var bookThumbnailUrl = results.rows.item(i).BK_THUMBNAIL_URL;
                    var book = new Book(bookId,bookTitle,bookUrl,bookThumbnailUrl);
                    books.push(book);

                } // end for loop
            } // end if block
        } // end execute callback
        ); // end executeSql call
    } // end transaction function argument
    ); // end db.transaction call

    return books; 
}

Тогда где-то, что вы вызвали эту функцию, сделайте что-то вроде этого:

var html="";

for (i=0; i<books.length; i++) {
   html += "<a href='" + books[i].url + "' title=\"" + books[i].title + "\" target='_new'><img src='" + books[i].thumbnailUrl + "'></a> &nbsp;";                                       
}
if (html == "") {
  html = "No result...";
}
element.innerHTML = html; // consider using jQuery here for browser compatability reasons

Это упростит отладку вашего кода в firebug или чего-либо еще и будет более читабельным. Позже, если вам нужна производительность, вы можете попытаться рекомбинировать и использовать существующий цикл в качестве оптимизации ... Преждевременная оптимизация обычно является плохой идеей. Напишите понятный код, который работает. Даже если вы знаете, что вам следует оптимизировать его, включите его, а затем оптимизируйте после того, как он сработает (предпочтительно после того, как вы продемонстрировали, что вам действительно нужно оптимизировать его).

http://www.flounder.com/optimization.htm

...