ASP.NET AJAX Function.createDelegate vs Function.createCallback?
Posted
技术标签:
【中文标题】ASP.NET AJAX Function.createDelegate vs Function.createCallback?【英文标题】:ASP.NET AJAX Function.createDelegate vs Function.createCallback? 【发布时间】:2010-10-27 06:18:02 【问题描述】:我正在阅读 manning - asp.net ajax in action 这本书。第 54-58 页描述了客户端委托和回调。
简而言之:
使用客户端委托,您可以更改事件处理程序本身中的this
变量以反映另一个对象。 (所以它不会是触发 DOM 事件的 DOM 对象)
通过回调,您可以将 context object
传递给您的事件处理程序,该事件处理程序将作为 第二个参数/参数在事件处理程序中使用强>.
你可以将一个对象“传递”给事件处理程序(this
或context object
),而事件处理程序(在它的范围内)将不可用。
这些客户端委托与回调之间有什么不同?
在我看来:
只有您希望在事件处理程序中可用的对象才能以不同的方式访问:
客户代表:this
回调:second argument
...也许只有 callback 有 DomEvent(first parameter) ,但没有客户端委托?!??
这是正确的吗?就这些吗?
也许您可以解释一下客户端委托和回调之间的区别。
【问题讨论】:
【参考方案1】:我不太确定这一点,但我认为回调是页面提交到服务器时发生的事情。
客户端创建委托用于创建调用 javascript 方法的委托。
Function.CreateDelegate() 方法非常有用。
假设你想在 JavaScript 中处理一个按钮点击事件。处理按钮点击的函数中可用的“this”对象就是被点击的按钮。
现在假设您有一个 JavaScript 对象,它捕获按钮单击事件并执行某些操作。通常“this”指的是 JavaScript 对象本身,但由于 Object 的方法用于处理按钮单击事件,“this”实际上指的是引发事件的对象:按钮。
为了解决这个问题,创建了 JavaScript apply 方法。因此,不是通过在 attachEvent/attachEventListener 方法(或 Ajax.NET 框架中的 $addHandler() 方法)中指定 JavaScript 对象的方法来捕获按钮单击事件,而是将 apply() 方法与这些 attachEvent/附加事件监听器。这会更改上下文,因此“this”指的是 JavaScript 对象,而不是引发事件的对象。
现在,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);
关于 apply() 方法,您应该了解一件事。当您执行它时,它会执行作为委托的方法。为了解决这个问题,createDelegate 方法执行上述操作。
所以,我不太确定回调如何适应这种情况,但是当您的 JavaScript 对象处理由某些 UI 元素引起的事件时,使用 createDelegate() 方法是个好主意。
我假设回调是请求从浏览器发送到服务器时发生的操作。大多数时候 __doPostback 方法用于执行回调。此方法采用 2 个参数...导致回发/回调到服务器的对象,以及回发/回调的参数。不过,这对客户代表来说将是完全不同的事情。
快乐编码
-弗林尼
【讨论】:
冗长的最佳答案以上是关于ASP.NET AJAX Function.createDelegate vs Function.createCallback?的主要内容,如果未能解决你的问题,请参考以下文章
在 DataTable Delete 操作中多次发送 Ajax 请求 - ASP.NET、JQuery、Ajax
ASP.NET MVC Ajax.ActionLink 简单用法