最近开发的一个多功能选择器总结1
关于脚本使用的总结
1.脚本全部作为嵌入的资源编译进去了。
2.这个控件使用到了微软Ajax框架中MicrosoftAjax.js,还有jQuery及jQuery的拖动插件
3.关于脚本的加载顺序。因为我自己控件的js中用到了MicrosoftAjax.js的一些方法,如注册命名空间,注册类
添加及移除事件等。所以要保证MicrosoftAjax.js在我的控件脚本之前添加。虽然我在页面中添加了ScriptManager控件
但是MicrosoftAjax.js总是在我的控件脚本之后加载。解决方法如下:
/// <summary>
/// 注册这个控件的客户端脚本
/// </summary>
private void RegisterControlClientScript()
{
ScriptManager sm = ScriptManager.GetCurrent(this.Page);
if (sm == null)
throw new Exception("sg_ComplexSelector控件必须在页面添加ScriptManager");
if (!string.IsNullOrEmpty(this.ClientScriptPath))
{
sm.Scripts.Add(new ScriptReference(this.ClientScriptPath));
}
else
{
//Page.ClientScript.RegisterClientScriptResource(this.GetType(), "Sagacity.Controls.sg_ComplexSelector.js");
sm.Scripts.Add(new ScriptReference(Page.ClientScript.GetWebResourceUrl(this.GetType(), "Sagacity.Controls.sg_ComplexSelector.js")));
}
}
/// 注册这个控件的客户端脚本
/// </summary>
private void RegisterControlClientScript()
{
ScriptManager sm = ScriptManager.GetCurrent(this.Page);
if (sm == null)
throw new Exception("sg_ComplexSelector控件必须在页面添加ScriptManager");
if (!string.IsNullOrEmpty(this.ClientScriptPath))
{
sm.Scripts.Add(new ScriptReference(this.ClientScriptPath));
}
else
{
//Page.ClientScript.RegisterClientScriptResource(this.GetType(), "Sagacity.Controls.sg_ComplexSelector.js");
sm.Scripts.Add(new ScriptReference(Page.ClientScript.GetWebResourceUrl(this.GetType(), "Sagacity.Controls.sg_ComplexSelector.js")));
}
}
大家看看我注册脚本的方式,就能发现两种注册方法不同了。
简单地说。如果页面有ScriptManager控件,最好有这个控件来负责加载其他js,并且在这个脚本中加上
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();关于微软Ajax框架更多东西,可以参考
赵劼(你不会不知道此人吧?)先生的blog,或其他参考书.
4.MicrosoftAjax添加元素事件$addHandler和我们用普通方式如document.onkeydow=function...之类的略有不同。
$addHandler是将事件添加到一个类似eventList的数组中,并不会直接赋值给元素的相应事件上。所以你$addHandler后
并不会在该控件的事件上直接看到你添加的事件函数。
作者:Jackhuclan
出处:http://jackhuclan.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://jackhuclan.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。