最近开发的一个多功能选择器总结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")));
    }
}

大家看看我注册脚本的方式,就能发现两种注册方法不同了。

简单地说。如果页面有ScriptManager控件,最好有这个控件来负责加载其他js,并且在这个脚本中加上

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();关于微软Ajax框架更多东西,可以参考

赵劼(你不会不知道此人吧?)先生的blog,或其他参考书.

4.MicrosoftAjax添加元素事件$addHandler和我们用普通方式如document.onkeydow=function...之类的略有不同。

$addHandler是将事件添加到一个类似eventList的数组中,并不会直接赋值给元素的相应事件上。所以你$addHandler后

并不会在该控件的事件上直接看到你添加的事件函数。

posted @ 2009-02-27 17:47  落叶潇潇雨  阅读(357)  评论(0编辑  收藏  举报