SharePoint DelegateControl渲染顺序

时间:2009-02-27 21:00:50

标签: sharepoint sharepoint-feature

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

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

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

feature.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>

Elements.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之前呈现。

3 个答案:

答案 0 :(得分:2)

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

<SharePoint:DelegateControl runat="server" ControlId="jQueryDelegate" AllowMultipleControls="true"/>
<SharePoint:DelegateControl runat="server" ControlId="AdditionalPageHead" AllowMultipleControls="true"/>

答案 1 :(得分:1)

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

有关详细信息,请参阅Delegate Control documentation on MSDN

答案 2 :(得分:0)

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

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

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

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

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