SharePoint DelegateControl Orden de procesamiento
-
09-09-2019 - |
Pregunta
Tengo dos características de SharePoint, cada implementado de forma idéntica (véase más adelante), que se suman a los controles de un control delegado en la cabecera de mis páginas. Uno de los controles depende del otro (uno es la biblioteca jQuery, y el otro depende de jQuery), sin embargo, cuando se representan los controles, el orden de los controles es incorrecta. ¿Cómo se especifica el orden en que estos controles se prestan en?
El control (ambos son idénticos, excepto que hacen referencia a un archivo .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>
La salida en la página (jQuery se despliega antes de DependsOnjQuery):
<script type="text/javascript" src="/_layouts/DependsOnjQuery.js"></script>
<script type="text/javascript" src="/_layouts/jQuery.min.js"></script>
Quiero MyControl1.js para rendir antes MyControl2.js.
Solución
Yo era capaz de conseguir que esto funcione mediante la adición de un segundo DelegateControl a la cabecera de mi masterpage, y la adición de jQuery para que el delegado. De esta manera, puedo asegurar que siempre se carga jQuery antes de todo lo demás, sin tener que escribir algo de lógica a retrasar la carga de mis bibliotecas dependientes.
<SharePoint:DelegateControl runat="server" ControlId="jQueryDelegate" AllowMultipleControls="true"/>
<SharePoint:DelegateControl runat="server" ControlId="AdditionalPageHead" AllowMultipleControls="true"/>
Otros consejos
A mi me parece como el atributo de secuencia se puede utilizar para controlar el orden en el que se prestan a estos tipos. Dé su jQuery controlar una secuencia de 50 y controlar su DependsOnjQuery una secuencia de 100 y usted debe ser bueno.
Consulte la documentación href="http://msdn.microsoft.com/en-us/library/ms463169.aspx" rel="nofollow noreferrer"> para obtener más información.
¿trató y se establece el atributo = DEFER "DEFER" en el guión.
que decirle al agente de usuario que el guión debe esperar a que la página se cargue y hacer antes de cargar el guión.
Otra cosa que podría entrar ilegalmente en él mediante el establecimiento de una variable en el guión, que se establece en true cuando se carga la escritura. En la otra lógica que ha colocado a prueba (piense en bucle y el método de tiempo de espera) si el guión se cargó y luego llama a su lógica cuando se cargan los dos guiones.
no es muy agradable, pero se necesita algún tipo de lógica para manejar la ejecución, y no sólo ejecuta los métodos en línea en el script.
Para Nathan: secuencias en delegados se utilizan para determinar que de los controles de delegado para cargar. Esto no debería tener nada que ver con el tema en cuestión. Como lo entiendo los archivos JS acaba de establecer el valor de un script que sólo pasa a ser un control delegado.