Вопрос

Как бы я пошел с использованием jQuery и jQuery ui (в основном, снимаемый компонент) в скрипте jslink.

До сих пор я пробовал несколько методов динамически загрузки JavaScript в скрипте jslink, но я не могу получить его на работу.В консоли веб-разработчика Firefox он только говорит, что $ не определена, jQuery не определен, а $ .ui не определен.

Это было полезно?

Решение

Если на странице jslink отсутствует, не ссылается на сценарии jQuery и jQuery ui, вам нужно будет загрузить их самостоятельно.Это можно сделать, например:

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);
}
.

from Включите файл JavaScript в другом файле JavaScript?

Тогда вы его используете:

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

Но на мой взгляд, мне всегда нужна jQuery на мои страницах, поэтому добавляю его через управление делегатом: Добавление jQuery на каждую страницу в SharePoint с делегическими элементами управления

В этом случае вы можете использовать

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

Другие советы

Вы можете использовать свойство jslink для загрузки нескольких файлов.Включите URL в файл jQuery, и у вас хороший обходной путь.Обратите внимание, что вам придется использовать URL в одном веб-приложении, вы не можете ссылаться на библиотеку с CDN или аналогичного.

попробуйте что-то вроде этого:

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

Я обычно использую вариант, похожий на то, что описывает EIRIKB в своем комментарии:

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");
});
.

В вашем скрипте jslink начните с

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

Результат будет что-то вроде этого.

(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);
})();
.

Отечно вы должны убедиться, что пользователи могут получить доступ к местоположению ajax.aspnetcdn.com / ... '.Если вам не нужно провести файл jQuery в вашей среде SharePoint.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top