Domanda

Ho due caratteristiche di SharePoint, ciascuno realizzato in modo identico (vedi sotto), che aggiungono i controlli a un controllo delegato nell'intestazione delle mie pagine. Uno dei controlli dipende dall'altro (uno è la libreria jQuery, e l'altra dipende jQuery), tuttavia, quando i controlli sono resi, l'ordine dei controlli non è corretto. Come faccio a specificare l'ordine in cui questi controlli siano resi in?

Il controllo (entrambi sono identici, tranne che fanno riferimento a un file js differente):

<%@ 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>

L'output della pagina (jQuery viene distribuita prima DependsOnjQuery):

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

Voglio MyControl1.js per rendere prima di MyControl2.js.

È stato utile?

Soluzione

Sono stato in grado di ottenere questo al lavoro con l'aggiunta di un secondo DelegateControl all'intestazione della mia masterpage, e l'aggiunta di jQuery per quel delegato. In questo modo, posso fare in modo che jQuery carica sempre prima di ogni altra cosa, senza dover scrivere una logica di ritardare il carico delle mie librerie dipendenti.

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

Altri suggerimenti

Sembra a me come l'attributo sequenza può essere utilizzato per controllare l'ordine in cui sono resi questi ragazzi. Lascia la tua jQuery controllare una sequenza di 50 e la tua DependsOnjQuery controllare una sequenza di 100 e si dovrebbe essere buono.

Vedere la documentazione Delega controllo su MSDN per maggiori informazioni.

hai provato e si imposta la DEFER = attributo "DEFER" sullo script.

che avrebbe detto l'agente utente che lo script deve attendere il caricamento della pagina e il rendering prima di caricare lo script.

altro si potrebbe incidere impostando una variabile a quella sceneggiatura, che è impostato a true quando lo script viene caricato. Nell'altra è stato inserito la logica che ha testato (si pensi ad anello e il metodo timeout) se lo script è stato caricato e quindi chiama la logica quando entrambi gli script vengono caricati.

non è molto bello, ma è necessario un qualche tipo di logica per gestire l'esecuzione, e non solo esegue i metodi in linea nello script.

Per nathan: sequenze delegati vengono utilizzati per determinare che i controlli delegati per caricare. Questo dovrebbe avere nulla a che fare con il problema in questione. A quanto mi risulta i file JS basta impostare il valore su uno script che sembra appena essere un controllo delegato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top