如何管理Ajax扩展器控件的javascript依赖

How to manage javascript Dependency for Ajax Extender controls

本文关键字:控件 扩展器 javascript 依赖 Ajax 何管理 管理      更新时间:2023-09-26

Ajax Extender控件基是否提供依赖管理?我正在创建一组使用行为使用的几个基本脚本的控件,并从这里创建一个扩展器控件它的样子,我将不得不包括我的基本脚本在每一个单一的控制代码。因此,扩展程序基是否为每个控件提供相同的脚本[缓存的脚本],或者为每个控件提供相同的脚本。

例如,我正在开发依赖于jQuery的控件。由于我正在开发扩展器控件,我将不得不从下面的接口实现这个方法,注意jquery脚本!

protected override IEnumerable<ScriptReference> GetScriptReferences()
{
    ScriptReference reference = new ScriptReference();
    reference.Path = ResolveClientUrl("jQuery.js");
    reference.Path = ResolveClientUrl("FocusBehavior.js");
    return new ScriptReference[] { reference };
}

现在我将有相同的jquery脚本在另一个控件,所以这是否意味着他们服务两次,如果两个控件在同一页面?还有一个问题,

如何使扩展程序控制输出生产脚本而不是调试脚本另外,用scriptmanager注册脚本对我来说不是一个选项,因为我使用不需要脚本管理器的主页。

一些规范:

在VS2005中开发

。Net 2.0, asp。NET 2.0

脚本依赖于Sizzle, emile.js, spine.js这些是所有控件所需的基本脚本

我相信ASP。. NET框架在其渲染过程中正确处理重复的ScriptReference对象。. NET控件可以存在于页面上的多个实例中。

例如,在ASP。. NET页面你可以做:

<act:Calendar runat="server" ID="calendar1"/>
<act:Calendar runat="server" ID="calendar2"/>

这两个控件依赖于相同的脚本,但是框架不会加载它们两次。

在您的情况下,您可能想要这样做:

protected override IEnumerable<ScriptReference> GetScriptReferences()
{
    List<ScriptReference> references = new List<ScriptReference>();
    #if DEBUG
    // Load Debug Version
    references.Add(new ScriptReference(ResolveClientUrl("~/Path_To_Your_Debug_JS.js"));     
    #else
    // Load Minified Version
    references.Add(new ScriptReference(ResolveClientUrl("~/Path_To_Your_Release_JS.js"));
    #endif
    return references;
}

这应该允许你提供调试或发布(缩小)版本的Javascript文件,这取决于是在调试或发布模式。

我不确定你关于你的主页不需要ScriptManager的评论。我将假设您有某种机制来处理ScriptManager的职责,例如在控件上调用GetScriptReferences()方法并处理这些脚本标记的呈现。