SharePoint DelegateControl renderização Order
-
09-09-2019 - |
Pergunta
Eu tenho dois recursos do SharePoint, cada implementados de forma idêntica (veja abaixo), que controla adicionar a um controle delegado no cabeçalho das minhas páginas. Um dos controles depende do outro (uma é a biblioteca jQuery, eo outro depende jQuery), no entanto, quando os controles são prestados, a ordem dos controles é incorreta. Como faço para especificar a ordem de que esses controles são prestados em?
O controle (ambos são idênticos, exceto que eles fazem referência um arquivo .js diferente):
<%@ 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>
A saída na página (jQuery é implantado antes DependsOnjQuery):
<script type="text/javascript" src="/_layouts/DependsOnjQuery.js"></script>
<script type="text/javascript" src="/_layouts/jQuery.min.js"></script>
Eu quero MyControl1.js de prestar antes de MyControl2.js.
Solução
Eu era capaz de chegar a este trabalho, adicionando um segundo DelegateControl ao cabeçalho do meu masterpage, e adicionando jQuery para esse delegado. Dessa forma, posso ter certeza de que jQuery sempre carregar antes de tudo o mais, sem ter que escrever alguma lógica para atrasar o carregamento das minhas bibliotecas dependentes.
<SharePoint:DelegateControl runat="server" ControlId="jQueryDelegate" AllowMultipleControls="true"/>
<SharePoint:DelegateControl runat="server" ControlId="AdditionalPageHead" AllowMultipleControls="true"/>
Outras dicas
Parece-me que o atributo Sequence pode ser usado para controlar a ordem em que esses caras são prestados. Dê seu jQuery controlar uma sequência de 50 e seu DependsOnjQuery controlar uma sequência de 100 e você deve ser bom.
Veja a documentação Controle delegado no MSDN para mais informações.
fez você tentar definir a = atributo "DEFER" DEFER no script.
que iria dizer ao agente de usuário que o script deve esperar a página carregar e renderizar antes de carregar o script.
Outra coisa que você poderia cortá-lo, definindo uma variável no um roteiro, que é definido como verdadeiro quando o script é carregado. No outro você colocou lógica que testado (acho loop e método de timeout) se o script foi carregado e, em seguida, chama a sua lógica quando ambos os scripts são carregados.
Não é muito bom, mas você precisa de algum tipo de lógica de execução punho, e não apenas executar os métodos em linha em seu script.
Para Nathan: seqüências em delegados são usados ??para determinar qual dos controles delegado para carregar. Este deve ter nada a ver com o assunto em questão. Pelo que entendi o JS arquivos apenas definir o valor em um script que só acontece de ser um controle delegado.