2012-05-01 17 views
0

這裏有很多代碼,但問題與底部的for循環有關。是否不必循環執行executeSql命令的結果?

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:我需要爲了調用模板(數據),以建立一個數據陣列,或我可以直接傳遞結果變量?

而'結果變量',我的意思是:result.rows或result.rows.item,或其他組合。

回答

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); 
     } 
    } 
+0

哦,這個問題必須專門處理小鬍子和把手。我是否需要遍歷結果集才能構建鬍鬚可以使用的數組。 –

1

恕我直言,你可以,但要告訴你實情,它會花更少的時間讓你嘗試一下,然後發佈問題。剛剛嘗試:

$('ul').append(template(result.rows)); 
+0

那麼,我已經嘗試了所有我能想到的組合。但用JavaScript,我發現答案是從來沒有想到的。這裏的StackOverflow的專家總是提出一個我沒有的觀點。 –

+0

我不明白。這是否工作?如果不是它有什麼問題呢? – Gavriel

+0

不,它沒有工作。我不得不循環遍歷result.rows.item()構建一個arrData []。有什麼問題?我不知道。它只是失敗了。 –