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

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

你可能感兴趣的:(选择器)