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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top