2012-05-01 2 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 & 자바 스크립트 만 프로젝트에 직접 전달했다. 아래 코드에서 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

글쎄, 나는 내가 생각할 수있는 모든 조합을 시도했다. 그러나 자바 스크립트를 사용하면 그 대답은 결코 내가 생각해 보지 못한 것임을 알게되었습니다. StackOverflow에 대한 전문가들은 항상 내가 가지고 있지 않은 관점을 제시합니다. –

+0

이해가 안됩니다. 이게 효과가 있었나요? 그게 무슨 문제가 아니라면? – Gavriel

+0

아니요, 작동하지 않았습니다. 나는 result.rows.item()을 반복하여 arrData []를 만들어야했습니다. 문제는 무엇 이었습니까? 나는 모른다. 그냥 조용히 실패했습니다. –

관련 문제