1

これは、divを動的に作成し、Phonegapデータベースからデータを取り込むための私のコードですが、(a)データベースから動的部分を追加しません。(b) Rows: エントリは、html コンテンツがダンプされた後、デバッガ コンソールに出力されます。すなわち。同期が取れていないようです:

var newPage;
var qry="SELECT literal,kunyomi from kanji where Unicode in(select b.Unicode from kanji_reading b where substr(b.kunyomi,1,1)='"+yomi+"')";

db.transaction(function (tx)
        {
            newPage = "<div data-role=page data-url=hi><div data-role=header><h1>" + yomi+ "</h1></div><div data-role=content>";
            newPage +="<ul data-role='listview' id='details'>";

            var temp="";    
            tx.executeSql(qry, [], function(tx,res)
                    {
                        var i;
                        var len = res.rows.length;
                        console.log("records"+len); 
                        for (i=0; i<len; i++)
                            {
                                newPage+="<li><span class='tra-info-text'>"+res.rows.item(i).kunyomi+"</span></li>";
                            }
                        newPage+="</ul></div></div>";
                    },null);

            var page=$(newPage);
            console.log("page:"+page);
            console.log("New Page:"+newPage);
            console.log("page container:"+$.mobile.pageContainer);
            page.appendTo($.mobile.pageContainer);
            $.mobile.changePage( page );    

    });

の出力にconsole.log("New Page:"+newPage);は、静的部分、つまり tx.executeSQL 部分の前のみが表示されます。tx.executeSQL 内に追加されたものは表示されません。

誰でも助けることができますか?

4

1 に答える 1

0

SQL クエリは非同期です。つまり、トランザクションが完了する前に、コードの最後 ( で始まるvar page = $(newPage)) が実行される可能性が高くなります。コードの残りの部分がトランザクションの後に実行されるようにする必要があります。最も簡単なのは、SQL トランザクションのコールバックに含めることです。

db.transaction(function (tx)
    {
        newPage = "<div data-role=page data-url=hi><div data-role=header><h1>" + yomi+ "</h1></div><div data-role=content>";
        newPage +="<ul data-role='listview' id='details'>";

        var temp="";    
        tx.executeSql(qry, [], function(tx,res)
                {
                    var i;
                    var len = res.rows.length;
                    console.log("records"+len); 
                    for (i=0; i<len; i++)
                        {
                            newPage+="<li><span class='tra-info-text'>"+res.rows.item(i).kunyomi+"</span></li>";
                        }
                    newPage+="</ul></div></div>";
                    var page=$(newPage);
                    console.log("page:"+page);
                    console.log("New Page:"+newPage);
                    console.log("page container:"+$.mobile.pageContainer);
                    page.appendTo($.mobile.pageContainer);
                    $.mobile.changePage( page );   
                },null);



});
于 2013-01-15T08:23:04.027 に答える