我有两个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之前呈现。
答案 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文件只是在脚本上设置了恰好是委托控件的值。