3

我有两个 SharePoint 功能,每个功能都以相同的方式实现(见下文),它们将控件添加到页面标题中的委托控件。其中一个控件依赖于另一个(一个是jQuery库,另一个依赖于jQuery),但是在渲染控件时,控件的顺序不正确。如何指定这些控件的呈现顺序?

控件(两者相同,只是它们引用了不同的 .js 文件):

<%@ Control ClassName="MyScriptControl" %>
<script type="text/javascript" src="/_layouts/MyScript.js"></script>

特征.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<Feature Id="AA9D59AC-D53E-4338-9B52-CD39F2A8C31A" 
    ActivateOnDefault="true" 
    Title="My Feature" 
    Description="Does something." 
    Scope="Site" Version="1.0.0.0" 
    Hidden="FALSE" 
    DefaultResourceFile="core" 
    xmlns="http://schemas.microsoft.com/sharepoint/">
    <ElementManifests>
        <ElementManifest Location="MyFeature\Elements.xml" /> 
    </ElementManifests>
</Feature>

元素.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/" 
    Id="24A4BB9A-9636-4a73-B3A5-35661DE19902">
    <Control Id="AdditionalPageHead" 
        ControlSrc="~/_controltemplates/MyControl.ascx" /> 
</Elements>

页面上的输出(jQuery 部署在 DependsOnjQuery 之前):

<script type="text/javascript" src="/_layouts/DependsOnjQuery.js"></script>
<script type="text/javascript" src="/_layouts/jQuery.min.js"></script>

我希望 MyControl1.js 在 MyControl2.js 之前呈现。

4

3 回答 3

2

我能够通过在我的母版页的标题中添加第二个 DelegateControl 并将 jQuery 添加到该委托来实现此功能。这样,我可以确保 jQuery 总是在其他所有内容之前加载,而无需编写一些逻辑来延迟我的依赖库的加载。

<SharePoint:DelegateControl runat="server" ControlId="jQueryDelegate" AllowMultipleControls="true"/>
<SharePoint:DelegateControl runat="server" ControlId="AdditionalPageHead" AllowMultipleControls="true"/>
于 2009-02-27T21:55:52.800 回答
1

在我看来,Sequence 属性可以用来控制这些家伙的渲染顺序。给你的 jQuery 控件一个 50 的序列,你的 DependsOnjQuery 控件一个 100 的序列,你应该很好。

有关详细信息,请参阅MSDN 上的委托控制文档

于 2009-02-27T21:20:30.170 回答
0

您是否尝试在脚本上设置 DEFER="DEFER" 属性。

这将告诉用户代理脚本应该在加载脚本之前等待页面加载和呈现。

否则,您可以通过在一个脚本中设置一个变量来破解它,该变量在加载脚本时设置为 true。在另一个中,如果脚本已加载,则您放置了测试的逻辑(思考循环和超时方法),然后在加载两个脚本时调用您的逻辑。

不是很好,但是您需要某种逻辑来处理执行,而不仅仅是在脚本中内联运行方法。

To nathan:委托中的序列用于确定要加载哪些委托控件。这应该与所讨论的问题无关。据我了解,JS 文件只是在恰好是委托控件的脚本上设置值。

于 2009-02-27T21:29:27.123 回答