从Atlas到Microsoft ASP.NET AJAX(7)
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。 |
ScriptManager and ScriptManagerProxy Controls Script References CTP版本中的ScriptManager和ScriptManagerProxy控件提供了引用所需Client FX脚本的方式,同时也提供了一个使用path或name属性来指定脚本引用的方法。下面的示例展示了这些控件的使用方式。 <atlas:ScriptManager runat="server" ID="ScriptManager"> <Scripts> <atlas:ScriptReference ScriptName="AtlasUIGlitz" /> <atlas:ScriptReference Path="~/Scripts/Custom.js" /> </Scripts> </atlas:ScriptManager> 被CTP版本所限制的几个关键情形在RTM版本中得以解决。事实上,RTM版本向页面开发人员提供了许多可选设置。在RTM版本中所作的改变包括:
Handling Debug and Release Scripts 在CTP版本中,ScriptManager控件能够指定一个是使用Debug还是Release类型的脚本引用。像之前提到的那样,两者的区别仅仅是Release脚本删除了不必要的空格而已。在页面中输出哪种类型的脚本,是由Web.config中debug设置决定的。 根据我们得到的用户反馈,在RTM版本中使用了一个新的模型,它能够允许ScriptManager控件将服务器端和客户端的debug设置分开。ScriptManager控件为客户端使用Debug脚本的依据在于添加为引用的命名规则。您能够总是引用Release脚本,而ScriptManager控件会为您处理好别的事情,例如debug脚本不存在时的fallback控制。 在RTM版本中,Release和Debug脚本都会经过压缩模块。在Release脚本中,它还会被“crunched”(混淆的意思?)——Beta暂不支持。 Script and Other Resource Registration APIs 正如UpdatePanel的部分所解释过的,在RTM版本中ScriptManager控件提供了新的API可用于注册脚本和其余的资源,这使得ScriptManager和客户端pageRequestManager能够控制如何跟踪在UpdatePanel里出现的部分页面PostBack。 另外,在RTM版本中,包括使用了Client FX的Entender在内的新控件,都会在将它们自己注册给ScriptManager后,再将自己的脚本库和其他的客户端对象注册给ScriptManager。 Extender Controls Extender控件能够允许你为现有的服务器控间添加客户端Behavior,以此增加新的功能和行为。在CTP版本中,您使用了一个单独的Extender控件,并设置它的控件属性与目标服务器控件一一对应,就像下面示例所展示的一样: <asp:TextBox runat="server" ID="City" /> <br/> <asp:TextBox runat="server" ID="CountryOrRegion" /> <atlas:AutoCompleteExtender runat="server" ID="AutoComplete1"> <atlas:AutoCompleteProperties TargetControlID="City" Enabled="True" ServicePath="AutoCompleteWebService.asmx" ServiceMethod="GetCompletionList" /> <atlas:AutoCompleteProperties TargetControlID="CountryOrRegion" Enabled="True" ServicePath="AutoCompleteWebService.asmx" ServiceMethod="GetCompletionList" /> </atlas:AutoCompleteExtender> Extender Controls and the Component Developer 在CTP版本中,组件开发人员能够使用ExtenderControl基类和ExtenderControlProperties类进行开发。在这里,开发人员负责开发相关Behavior的客户端脚本,然后使用Extender的RenderScript方法中的ScriptTextWriter类型参数将其XML-Script输出。组件开发人员会将他们的脚本注册给控件的特定生命周期事件,例如Init事件。 根据用户反馈,并考虑到减轻其复杂度能够有利于今后的扩展,我们实现了一个新的模型。在RTM版本中,组件开发人员直接使用了ExtenderControl类。开发人员能够为自己的控件实现IScriptControl和IExtenderControl接口,以此来处理页面中存在ScriptManager的情况。 Extender控件依然会注册给ScriptManager控件。然而,它们会被框架要求提供它们的所需的脚本类库,并提供一个新的ScriptDescriptor类型的对象,从而避免了旧的模型中需要控件开发人员在控件的生命周期中自行输出这些信息。ScriptDescriptor类型会与Component,Behavior和Control等客户端类型一一映射,这种做法为客户端对象抽象了脚本的生成过程,这使生成客户端对象变成了一件简单的事情。 在这种模型下,服务器控件就无需得知应该如何将脚本输出了,这方便了今后的扩展和支持。下面的示例简单展示了在RTM版本中ScriptDescriptor类型的使用方式: protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors (Control targetControl) { ScriptBehaviorDescriptor descriptor = new ScriptBehaviorDescriptor("Sample.UI.BorderBehavior", targetControl.ClientID); if (!Color.IsEmpty) { descriptor.AddProperty("color", ColorTranslator.ToHtml(Color)); } if (Style != BorderStyle.NotSet) { descriptor.AddProperty("style", Style.ToString()); } if (!Width.IsEmpty) { descriptor.AddProperty("width", Width.ToString()); } yield return descriptor; } protected override IEnumerable<ScriptReference> GetScriptReferences() { ScriptReference reference = new ScriptReference(); Reference.Path = ResolveClientUrl("~/ScriptControls/BorderBehavior.js")); yield return reference; } 在这个示例中,我们使用了ScriptDescriptor类型中的AddProperty方法来设置客户端对象的属性值。请注意我们也使用了ScriptReference类型来返回一个特定的脚本引用,在这里我们使用了一个静态的URL,而不是Web Resource脚本引用。 本文出自 “赵劼” 博客,转载请与作者联系! 本文出自 51CTO.COM技术博客 |



jeffz
博客统计信息
热门文章
最新评论
友情链接
