Question

Comment allez-y utiliser JQuery et JQuery UI (principalement le composant de tri) dans un script Jslink.

Jusqu'à présent, j'ai essayé plusieurs méthodes de chargement de manière dynamique JavaScript dans le script JSLink, mais je ne peux pas sembler le faire fonctionner.Dans la console de développeur Web Firefox, il est simplement indiqué que $ n'est pas défini, JQuery n'est pas défini et $ .UI n'est pas défini.

Était-ce utile?

La solution

Si la page Le JSLINK est activé ne fait pas référence à des scripts JQuery et JQuery UI, vous devrez les charger vous-même.Cela peut être fait par exemple:

function loadScript(url, callback)
{
    // adding the script tag to the head as suggested before
   var head = document.getElementsByTagName('head')[0];
   var script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = url;

   // then bind the event to the callback function 
   // there are several events for cross browser compatibility
   script.onreadystatechange = callback;
   script.onload = callback;

   // fire the loading
   head.appendChild(script);
}

de Inclure un fichier JavaScript dans un autre fichier JavaScript?

alors vous l'utilisez:

loadScript("url to jQuery", loadScript("url to jQuery UI", function (){
    // do your stuff here
});

Mais à mon avis, j'ai toujours besoin de jQuery sur mes pages, donc je l'ajoutez à travers un contrôle de délégué: Ajout de jQuery à chaque page de SharePoint avec des contrôles de délégués

Dans ce cas, vous pouvez ensuite utiliser

ExecuteOrDelayUntilScriptLoaded("jquery path", function(){
    // Your stuff here
});

Autres conseils

Vous pouvez utiliser la propriété JSLink pour charger plusieurs fichiers.Incluez une URL dans le fichier jQuery et vous avez une bonne solution de contournement.Veuillez noter que vous devrez utiliser une URL dans la même application Web, vous ne pouvez pas référencer la bibliothèque à partir d'un CDN ou similaire.

Essayez quelque chose comme ceci:

$Field.JSLink="~sitecollection/Style Library/MicrosoftAjax.js|~sitecollection/Style Library/jquery-1.7.2.min.js|~sitecollection/Style Library/YourTemplate.js" 

J'utilise habituellement une variante similaire à ce que Eirikb décrit dans son commentaire:

if(typeof jQuery == 'function') 
    NotifyScriptLoadedAndExecuteWaitingJobs("jquery.js");
else if (LoadSodByKey('jquery.js', null) == Sods.missing) 
    RegisterSod('jquery.js', '//code.jquery.com/jquery-1.11.0.min.js');


SP.SOD.executeFunc("jquery.js", "jQuery", function () { 
    console && console.log("jquery loaded");
});

dans votre script jslink commence avec

(window.jQuery || document.write('<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.10.0.min.js"><\/script>'));

résultat sera quelque chose comme ça.

(function () {
    (window.jQuery || document.write('<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.10.0.min.js"><\/script>'));

    var overrides = {};
    overrides.Templates = {};

    overrides.Templates.Fields = {
        "FileLeafRef": {
            "NewForm": FillDefaultTitle
        }
    };

    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrides);
})();

Bien sûr, vous devez vous assurer que les utilisateurs peuvent accéder à l'emplacement 'ajax.aspnetcdn.com / ...'.Sinon, vous devez héberger le fichier jQuery dans votre SharePoint Envirnoment.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top