4

function(tx)このページから、以下のコード スニペットで説明してください: http://www.webkit.org/demos/sticky-notes/。どこに、どのようにtx割り当てられますか? ここで情報を探しましたが、まだ暗闇の中にいます。

私が理解していると思うのは、オブジェクトのsaveAsNewメソッドが、最初にタイムスタンプを作成し、それ自体へのローカル参照を作成する匿名関数として定義されていることです (note=this)、次にdbオブジェクトのトランザクションメソッドを呼び出します。そのメソッドに、引数txを持つさらに別の無名関数であるパラメーターを提供します。しかし、 txがどこから来ているのかわかりません。

   .
   .
   .
      saveAsNew: function()
         {
             this.timestamp = new Date().getTime();        
             var note = this;
             db.transaction(function (tx)   
                 {
                 tx.executeSql("INSERT INTO WebKitStickyNotes (id, note, timestamp, left, top, zindex) VALUES (?, ?, ?, ?, ?,                   ?)", [note.id, note.text, note.timestamp, note.left, note.top, note.zIndex]);
                 }); 
    },
    .
    .
    .

完全なコード貼り付け

4

7 に答える 7

1

まず、txパラメータの定義です。任意の名前を選択できますbar。関数を次のように定義するのと同じです。

function foo(bar) {

}

「誰」がこの引数を渡しているのか疑問に思うなら、それはおそらくdb.transaction. 関数をコールバック [ウィキペディア]として渡しています。どこかで次のdb.transactionように呼び出されます:

callback(transaction);

たぶん、この例はそれを理解するのに役立ちます:

function hello(callback) {
    // do some very important world changing computations... then:
    callback('Hello ');
}

hello(function(foobar) {
    alert(foobar + 'Tim!');
});
// alerts 'Hello Tim!'

ここで、hello関数は 1 つのパラメーターをコールバック関数に渡します。

于 2011-08-25T13:36:08.070 に答える
0

関数呼び出しdb.transaction()自体には、1 つのパラメーターが必要です。そのパラメーター自体が呼び出す関数でdb.transaction()あり、その関数を呼び出すと、1 つのパラメーターが渡されます。名前txは何でもかまいません。これは、この関数の最初のパラメーターの名前です。

あなたのコードは、db.transaction()あなたがここで行ったように、無名関数として渡す関数で書かれている可能性があります:

db.transaction(function (tx)   
{
    tx.executeSql("INSERT INTO WebKitStickyNotes (id, note, timestamp, left, top, zindex) VALUES (?, ?, ?, ?, ?,                   ?)", [note.id, note.text, note.timestamp, note.left, note.top, note.zIndex]);
}); 

または、何が起こっているかがもう少し明白であるが、それほどコンパクトではない場合、次のように書くこともできます。

function writeSql(tx) {
    tx.executeSql("INSERT INTO WebKitStickyNotes (id, note, timestamp, left, top, zindex) VALUES (?, ?, ?, ?, ?,                   ?)", [note.id, note.text, note.timestamp, note.left, note.top, note.zIndex]);
}

db.transaction(writeSql);
于 2011-08-25T13:43:26.643 に答える
0

何が何であるかを知っていればtransaction()、もっとあなたを助けることができるかもしれません.

しかし、それは関数が返すものだと思います。

Like click にはeventが返されます

したがって、transactionコードのどこかで変数が関数に送信され、その変数に名前を付けてコードで使用できます。


以前のコードから:

db = openDatabase("NoteTest", "1.0", "HTML5 Database API example", 200000);

openDatabasetransaction機能しているのかを調べる必要があります。

openDatabase()あなたはここで読むことができます

于 2011-08-25T13:33:22.063 に答える
0

関数 saveAsNew は、引数として tx を取る関数を返します。

var new = saveAsNew();
new(tx);

tx がどこから来たのかについては、このスニペットからはわかりません。

于 2011-08-25T13:33:52.620 に答える
0

db.transaction() 関数は、1 つのパラメーター (この例では function(tx) ) を取る関数である引数を取る必要があります。

おそらく db.transaction(callback) として文書化されています。

パラメータ tx は、db.transaction() 関数によってコールバック関数 (この場合は匿名関数 (tx)) に送信されます。

于 2011-08-25T13:34:55.227 に答える
0

匿名メソッド定義で同じ変数を使用する限り、任意の変数を使用できます。トランザクション メソッドは、匿名メソッドを呼び出すときに最初のパラメーターとして値を渡し、tx に割り当てられます。

于 2011-08-25T13:35:22.593 に答える
0

あなたのコードはこれと同等です:

 saveAsNew: function()
     {
         this.timestamp = new Date().getTime();        
         var note = this;
         function booga(tx)
         {
             tx.executeSql("INSERT INTO WebKitStickyNotes (id, note, timestamp, left, top, zindex) VALUES (?, ?, ?, ?, ?,                   ?)", [note.id, note.text, note.timestamp, note.left, note.top, note.zIndex]);
         }
         db.transaction(booga);
},

「booga(tx)」の「tx」はどこから来たのですか? 回答: booga を呼び出す人は誰でもパラメーターを渡します。tx はそのパラメーターに付けた名前です。

于 2011-08-25T13:40:10.920 に答える