【问题标题】:How to manage javascript Dependency for Ajax Extender controls如何管理 Ajax Extender 控件的 javascript 依赖关系
【发布时间】:2011-11-11 19:57:57
【问题描述】:

Ajax Extender 控件库是否提供依赖关系管理?我正在创建一组控件,这些控件使用行为使用的一些基本脚本,从这里Creating a Extender Control 看起来我必须在每个控制代码中包含我的基本脚本。扩展器基础也是为每个控件提供相同的脚本[缓存的],还是为每个控件提供相同的脚本。

例如,我正在开发依赖于 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 的脚本依赖,这些是所有控件所需的基本脚本

【问题讨论】:

    标签: javascript asp.net dependency-management asp.net-controls extender


    【解决方案1】:

    我相信 ASP.NET 框架确实可以在其呈现过程中正确处理重复的 ScriptReference 对象,因为 ASP.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 文件的调试或发布(缩小)版本,具体取决于处于调试或发布模式。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 2011-03-13
      • 2018-10-12
      相关资源
      最近更新 更多