2012-09-16 92 views
5

我打電話的功能db.transaction與下面的代碼:將額外參數傳遞給WebSQL回調函數?

db.transaction(createSheetDB, function(){alert("Sheet creation error!")}, function(){alert("Sheet created!")}); 

功能createSheetDB是一個回調函數,其隱含db.transaction稱爲(),這也傳遞給它的參數TX。我已經實現的功能createSheetDB(TX)是這樣的:

function createSheetDB(tx) { 
var nextId = getNextId(); 
tx.executeSql("INSERT INTO SHEET(id, name, desc) VALUES("+nextId+",'"+sheetName+"','"+desc+"')", [], 
     function(){alert("Sheet row inserted!")}, 
     function(tx, err){alert("Sheet row insertion Error: "+err.message+" "+err.code)} 
);} 

現在的問題是SHEETNAME和降序的值僅在調用函數中是可用的。我如何將它們傳遞到函數createSheetDB(tx)?

+1

有*很多*問題/供一般情況下答案(使用綁定到局部變量封閉然後調用真正的回調函數或定義真正的回調函數在相同的詞法範圍或..),所以希望這個*精煉案例*會更適用..但我不使用WebSQL。 – 2012-09-16 01:44:43

+0

謝謝@pst,我目前使用這種方式來解決我的問題。 –

回答

3

您可以使用一種技術來創建一個新的回調函數,該回調函數將關閉您想要的變量。

function doStuff(callback) { 
    var val = 43; 
    callback(val); 
} 

function myCallback(val, anotherVal) { 
    alert("val: " + val + "\nanotherVal: " + anotherVal); 
} 

(function() { 

    var anotherVal = "Whoa!", 
     anotherCallback = function(val) { 
      return myCallback(val, anotherVal); 
     }; 

    doStuff(anotherCallback); 

}());​ 
+0

謝謝@Josh,這個解決方案看起來比shaac更清潔。 –

1

回調創建一個功能

function createSheetDB(sheetName, desc) { 
    return function(tx){ 
     var nextId = 1; 
     alert("INSERT INTO SHEET(id, name, desc) VALUES("+nextId+",'"+sheetName+"','"+desc+"')"); 
     /* delete above two lines and uncomment for your code 
     var nextId = getNextId(); 
     tx.executeSql("INSERT INTO SHEET(id, name, desc) VALUES("+nextId+",'"+sheetName+"','"+desc+"')", [], 
      function(){alert("Sheet row inserted!")}, 
      function(tx, err){alert("Sheet row insertion Error: "+err.message+" "+err.code)} 
     ); 
     */ 
    } 
} 

// dummy code to show as example 
db = {transaction: function(fn,lose,win){return fn(),win();}}; 

function testIt(){ 
    var sheetName = 'hello', 
     desc = 'world'; 
    db.transaction(createSheetDB(sheetName, desc), function(){alert("Sheet creation error!")}, function(){alert("Sheet created!")}); 
    // note how createSheetDB is now called with the vars you want 
} 
+0

謝謝@shhac。該解決方案看起來不錯但對我來說,喬希看起來更清潔。雖然它可能就是我。 ;) –

+0

這很公平。我會發現喬希的方式很難跟隨變量,在一大塊代碼中,這就是爲什麼我把它們全部放在一起作爲一個函數。 –

相關問題