2009-05-19 9 views
3

私は実際にmanning - asp.net ajaxという本を読んでいます。クライアントデリゲートとコールバックについて説明します。要するにASP.NET AJAX Function.createDelegateとFunction.createCallback?

:あなたが別のオブジェクトを反映するために、イベントハンドラ自体にthis変数を変更することができますクライアントデリゲートと

二通りのイベントハンドラで利用できるようになりますあなたのイベントハンドラにcontext objectを渡すことができコールバックと

(それは、DOMイベントのためのイベントを発生させたDOMオブジェクトをされません)引数/パラメータ

イベントハンドラ(その範囲内)で使用できないイベントハンドラ(それはthisまたはcontext object)にオブジェクトを両方とも渡すことができます。

これらのクライアント代理人とコールバックの違いは何ですか?

私にはいるようです:

  • クライアントデリゲート:

    は唯一のオブジェクトあなたはイベントハンドラで使用できるようにするにはさまざまな方法でアクセスあるthis

  • コールバック:second argument
のみ コールバックDomEvent(最初のパラメータ)ではなく、クライアントのデリゲートを持っ

...と、おそらくこと?!??

これは間違いありませんか?それはすべてですか?

おそらく、クライアントデリゲートとコールバックの違いについて説明できます。

答えて

3

私は実際これについてはわかりませんが、コールバックとは、ページがサーバーに送信されたときに起こることです。

クライアント作成代理人は、JavaScriptメソッドを呼び出すためのデリゲートを作成するためのものです。

Function.CreateDelegate()メソッドは本当に役に立ちます。

JavaScriptでボタンのクリックイベントを処理するとします。ボタンのクリックを処理する関数で使用できる「this」オブジェクトは、クリックされたボタンです。

ここでボタンクリックイベントをキャプチャして何かをするJavaScriptオブジェクトがあるとします。通常、thisはJavaScriptオブジェクト自体を参照しますが、Objectのメソッドはボタンのクリックイベントを処理するために使用されるため、実際にはイベントを発生させたオブジェクト、つまりボタンを参照します。

これを回避するには、JavaScript applyメソッドを作成しました。したがって、attachEvent/attachEventListenerメソッド(またはAjax.NET Frameworkの$ addHandler()メソッド)でJavaScriptオブジェクトのメソッドを指定してbutton clickイベントをキャプチャする代わりに、実際にはattachEventメソッドでapply()メソッドを使用します。 attachEventListener。これにより、コンテキストを変更し、「this」はイベントを発生させたObjectではなくJavaScript Objectを参照します。

ここで、Function.CreateDelegate()メソッドは、クライアントデリゲートの作成でapplyメソッドを使用するだけではありません。

は、コードを見てみましょう:

Function.createDelegate = function Function$createDelegate(instance, method) { 
    /// <summary locid="M:J#Function.createDelegate" /> 
    /// <param name="instance" mayBeNull="true"></param> 
    /// <param name="method" type="Function"></param> 
    /// <returns type="Function"></returns> 
    var e = Function._validateParams(arguments, [ 
    {name: "instance", mayBeNull: true}, 
    {name: "method", type: Function} 
    ]); 
    if (e) throw e; 
    return function() { 
     return method.apply(instance, arguments); 
    } 
} 

あなたが適用されます()メソッドについて知っておくべき一つのことがあります。実行すると、デリゲートであるメソッドが実行されます。これを回避するには、createDelegateメソッドが上記の処理を行います。

コールバックの仕組みが分かりませんが、JavaScriptオブジェクトがUI要素によって引き起こされるイベントを処理するときは、createDelegate()メソッドを使用することをお勧めします。

私は、コールバックが、ブラウザからサーバーにリクエストが送信されたときに実行されるアクションであると仮定しています。ほとんどの場合、__doPostbackメソッドを使用してコールバックをプリフォームします。このメソッドは、サーバーへのポストバック/コールバックを引き起こすオブジェクトとポストバック/コールバックの引数の2つのパラメータをとります。これはクライアントの代理人にとってまったく異なるものです。最良の答えで

-Frinny

+0

冗長コーディングハッピー

egidiocs