0

这里有很多代码,但问题与底部的 for 循环有关。

var dbo = openDatabase('xxx','1.0','myDatabase', 1048576);
var DropTableDeferred = new $.Deferred();
var CreateTableDeferred = new $.Deferred();
var InsertDeferred = new $.Deferred();
var SelectDeferred = new $.Deferred();
dbo.transaction(function(myTrans) {
    myTrans.executeSql(
        'drop table myTable;'
        ,[]
        ,DropTableDeferred.resolve()
    );
});
DropTableDeferred.done(function() {
    dbo.transaction(function(myTrans) {
        myTrans.executeSql(
            'CREATE TABLE IF NOT EXISTS myTable' 
            + '(xxxID Integer NOT NULL PRIMARY KEY'
            + ',xxxName Varchar(128)'
            + ');'
            ,[]
            ,CreateTableDeferred.resolve()
        );
    });
});
CreateTableDeferred.done(function() {
    dbo.transaction(function(myTrans) {
        myTrans.executeSql("INSERT INTO myTable(xxxID,xxxName) VALUES(1,'A')");
        myTrans.executeSql("INSERT INTO myTable(xxxID,xxxName) VALUES(2,'B')");
        myTrans.executeSql(
            "INSERT INTO myTable(xxxID,xxxName) VALUES(3,'C')",
            [],
            InsertDeferred.resolve()
        );
    });
});

InsertDeferred.done(function() {
    dbo.transaction(function(myTrans) {
        myTrans.executeSql(
            'SELECT * FROM myTable',
            [], 
            function(tx, result) {
                SelectDeferred.resolve(result);
            }
        );
    });
});

SelectDeferred.done(function(result) {
    var X = $('#result-template').html();
    var template = Handlebars.compile(X);
    var data = [];

    for(var i=0;i < result.rows.length; i++) {
        data.push(result.rows.item(i));
    }
    $('ul').append(template(data));
});

Q: 调用template(data)是否需要建立一个数据数组,或者我可以直接传递result变量吗?

通过“结果变量”,我的意思是:result.rows,或 result.rows.item,或其他一些组合。

4

2 回答 2

1

恕我直言,你可以,但说实话,你可以花更少的时间去尝试然后发布问题。试试看嘛:

$('ul').append(template(result.rows));
于 2012-05-01T19:48:46.237 回答
1

是的,该值已直接在我的仅 html&javascript 项目中传递。在下面的代码中,我得到了 Sql 的结果并填充了一个下拉框的选项。

    function fillLectureFromDB(tx) {
        tx.executeSql('SELECT * FROM LECTURE', [], successFill, errorFill);
    }
    function successFill(tx, results) {
        var len = results.rows.length;
        for (var i=0; i<len; i++){
            var elOptNew = document.createElement('option');
            elOptNew.text = results.rows.item(i).code;
            elOptNew.value = results.rows.item(i).code;
            var elSel = document.getElementById('slExCode');
            elSel.add(elOptNew, null);  
        }
    }
于 2012-05-01T19:49:20.493 回答