ASP.NET AJAX Function.createDelegate vs Function.createCallback?

标签 asp.net javascript asp.net-ajax

我正在阅读《manning - asp.net ajax in action》这本书。在第 54-58 页描述了客户端委托(delegate)和回调。

简而言之:

使用客户端委托(delegate),您可以更改事件处理程序本身中的this 变量以反射(reflect)另一个对象。 (所以它不会是触发 DOM 事件的事件的 DOM 对象)

通过回调,您可以将上下文对象传递给您的事件处理程序,该事件处理程序将作为第二个参数/参数

两者都可以将对象“传递”给事件处理程序(thiscontext object),而事件处理程序(在它的范围)。

这些客户端委托(delegate)与回调之间有什么不同?

在我看来:

只有您希望在事件处理程序中可用的对象可以以不同方式访问:

  • 客户端委托(delegate):this
  • 回调:第二个参数

...也许只有 回调DomEvent(first parameter)但没有客户端委托(delegate)?!??

这是正确的吗?就这些吗?

也许您可以解释一下客户端委托(delegate)和回调之间的区别。

最佳答案

我对此不太确定,但我认为回调是将页面提交到服务器时发生的事情。

客户端创建委托(delegate)用于创建调用 JavaScript 方法的委托(delegate)。

Function.CreateDelegate() 方法非常有用。

假设您要在 JavaScript 中处理按钮单击事件。处理按钮点击的函数中可用的“this”对象是被点击的按钮。

现在假设您有一个 JavaScript 对象,它捕获按钮单击事件并执行某些操作。通常“this”指的是 JavaScript 对象本身,但由于 Object 的方法用于处理按钮单击事件,“this”实际上指的是引发事件的对象:按钮。

为了解决这个问题,JavaScript apply方法被创建。因此,不是通过在 attachEvent/attachEventListener 方法(或 Ajax.NET Framework 中的 $addHandler() 方法)中指定 JavaScript 对象的方法来捕获按钮单击事件,而是实际上将 apply() 方法与这些 attachEvent/附加事件监听器。这会更改上下文,以便“this”引用 JavaScript 对象而不是引发事件的对象。

现在,Function.CreateDelegate() 方法不仅仅使用 apply 方法来创建客户端委托(delegate)。

看一下代码:

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);
    }
} 

关于 apply() 方法,您应该了解一件事。当您执行它时,它会执行作为委托(delegate)的方法。为了解决这个问题,createDelegate 方法执行上述操作。

所以,我不太确定回调如何适用于此,但是当您的 JavaScript 对象处理由某些 UI 元素引起的事件时,使用 createDelegate() 方法是个好主意。

我假设回调是在请求从浏览器发送到服务器时发生的操作。大多数时候 __doPostback 方法用于执行回调。此方法采用 2 个参数...导致回发/回调到服务器的对象,以及回发/回调的参数。不过,对于客户代表来说,这将是完全不同的事情。

快乐编码

-弗林尼

关于ASP.NET AJAX Function.createDelegate vs Function.createCallback?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/881544/

相关文章:

c# - MySql:在if语句中选择

JavaScript filter() 方法混淆

ASP.NET MVC 安全性 - 您应该在哪一层检查用户是否有权查看实体?

javascript - 在保持默认样式的同时禁用按钮集

javascript - 将js添加到drupal节点表单

javascript - AngularJS 按钮单击绑定(bind)值到输入

javascript - Ajax Minifier (AjaxMin) - JavaScript 的 EvalTreatment?

c# - 在ASP.NET MVC中发生NullReferenceException异常时在浏览器中创建错误消息

c# - 如何为此聊天应用程序使用 Ajax

java - HttpPost到asp服务器上(HTML形式)