Question

J'ai deux fonctionnalités de SharePoint, chaque œuvre identique (voir ci-dessous), qui ajoutent des contrôles à un contrôle des délégués dans l'en-tête de mes pages. L'un des contrôles dépend de l'autre (on est la bibliothèque jQuery, et l'autre dépend de jQuery), cependant, lorsque les contrôles sont rendus, l'ordre des commandes est incorrecte. Comment puis-je spécifier l'ordre que ces contrôles sont rendus dans?

Le contrôle (les deux sont identiques, sauf qu'ils font référence à un fichier .js différente):

<%@ 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 sortie sur la page (jQuery est déployé avant DependsOnjQuery):

<script type="text/javascript" src="/_layouts/DependsOnjQuery.js"></script>
<script type="text/javascript" src="/_layouts/jQuery.min.js"></script>

Je veux MyControl1.js avant de rendre MyControl2.js.

Était-ce utile?

La solution

J'ai pu obtenir ce travail en ajoutant un second DelegateControl l'en-tête de mon masterpage, et en ajoutant à jQuery ce délégué. De cette façon, je peux vous assurer que jQuery sera toujours charger avant tout le reste, sans avoir à écrire une certaine logique pour retarder le chargement de mes bibliothèques dépendantes.

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

Autres conseils

Il me semble que l'attribut de séquence peut être utilisée pour contrôler l'ordre dans lequel ces gars-là sont rendus. Donnez votre contrôle jQuery une séquence de 50 et votre DependsOnjQuery contrôle une séquence de 100 et vous devriez être bien.

Voir la délégué documentation de contrôle sur MSDN pour plus d'informations.

avez-vous essayé et définissez l'attribut DEFER = "DEFER" sur le script.

qui raconterait l'agent utilisateur que le script doit attendre la page pour charger et rendre avant de charger le script.

Sinon, vous pouvez le pirater en définissant une variable au seul script, qui est défini sur true quand le script est chargé. Dans l'autre vous avez placé la logique qui a testé (boucle et penser méthode de délai d'attente) si le script a été chargé et appelle ensuite votre logique lorsque les deux scripts sont chargés.

pas très agréable, mais vous avez besoin d'une sorte de logique pour gérer l'exécution, et non seulement d'exécuter les méthodes en ligne dans votre script.

Pour nathan: séquences délégués sont utilisées pour déterminer qui des contrôles des délégués à charger. Cela devrait avoir rien à voir avec le problème en question. Si je comprends bien les fichiers JS situé juste à la valeur sur un script qui se trouve être un contrôle délégué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top