处理自定义控件中的JavaScript的最佳方法是什么?

6
在ASP.Net中,我制作了一些自定义控件。我在需要的时候使用了jQuery。现在,我有一个问题(显然,并且是“不好的”解决方法),对于每个用户控件,我需要从pageLoad内部执行一些代码($(document).ready将无法与更新面板一起使用)。
现在我的问题是,我需要两个自定义控件附���到pageLoad事件。最好的方法是什么?
我不能只是这样做:
old_pageLoad=pageLoad
pageLoad=function(){... old_pageLoad();}

因为这些自定义控件可以在页面上使用多次,而且脚本需要运行每个控件的每个实例,如果页面上有3个不同的自定义控件怎么办?
我想到的唯一方法就是像这样写,但这似乎很不专业:
old_pageLoad_<%= MyStaticClass.GetUniqueID() %>=pageLoad;
pageLoad=function(){... old_pageLoad_<%= MyStaticClass.GetUniqueID() %>();}

有没有更好的处理函数冲突的方法?

我也看过这篇MSDN文章,但它所建议的做法似乎比我目前正在做的更糟糕。

2个回答

1
另一种方法是添加一个处理程序,在异步回发结束时调用Javascript方法。我在几个场合下都这样做过,以重新初始化jQuery对话框。例如:
$().ready(function() {
  myInitMethod();
  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myInitMethod);
});

function myInitMethod() }
  // Init code
}

1
使用ScriptManagerRegisterStartupScript方法。在注册脚本时,传入对您的控件的引用,这将确保每当控件更新(无论是在第一次页面加载时还是在UpdatePanel更新时),都会运行初始化脚本。

是的,但这意味着我必须将我的JavaScript作为字符串(在代码后台中)处理,这意味着没有语法高亮,并且您必须采用字符串连接或字符串替换来插入服务器端内容。 - Earlz
@Earlz:这就是为什么要将大部分代码放入一个外部的.js文件中,并仅在RegisterStartupString脚本中放置一个简单的函数调用(可能带有特定于控件的参数)。我使用自定义JS编写器来构建参数字符串,因此不必担心转义和诸如此类的问题。 - Matti Virkkunen
我已经尝试过这个了,但是当我需要读取大约10个不同的值时,一个函数需要10个参数有点长。 - Earlz
Earlz:这仍然是它的工作方式。如果您有许多参数,请传递一个对象或数组。 - Matti Virkkunen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接