Phonegap とその sqlite API を使用して Android アプリを作成しています。前のクエリでいくつかの条件が満たされた場合に、レコードを挿入したいと思います。例えば、
tx.executeSql("SELECT * FROM T_Task WHERE is_valid=1",[], successCB, errorCB);
successCB で、タスクの日付が今日で、今日のサブタスクがまだ追加されていない場合、サブタスクを追加したい。タスクが既に存在するかどうかを確認する条件は、タスクのタイトルです。
function successCB(tx,results){
for(var i=0; i<results.rows.length; i++){
var item=results.rows.item(i);
if(item.date==today){//'today' is defined elsewhere, globally accessible
var sql="SELECT * FROM T_SubTask WHERE title='"+item.title+"' and date='"+today+"')";
tx.executeSql(sql,[],function(tx,results){addSubTask(tx, results, item.title)},errorCB);
}
}
問題は、複数のタスクがある場合、渡すパラメーター item.title が最後のループによってオーバーライドされることです。同様の問題を回避するために (function(x){FUNCTION(x)})(item.title) のようなものを使用できることを知っています。しかし、正しい 'item.title' と 'results' パラメーターの両方を渡したい sqlite のケースでそれを行う方法がわかりません。私が使用する場合
tx.executeSql(sql,[],function(tx,results){ (function(x){addSubTask(tx, results, x)})(item.title),errorCB);
、別の問題は、結果が「FROM T_SubTask」クエリの結果オブジェクトではなく、「successCB(tx, results)」の入力パラメーターになることです。
ここですべてを正しくするにはどうすればよいですか?