Мой скрипт JSLink не будет работать

Я пытаюсь использовать JSLink .. наконец .. и у меня возникли проблемы, которые я не могу решить. Для своего первого путешествия по кроличьей норе я выбрал что-то очень простое для использования в качестве доказательства концепции. Поэтому я просмотрел учебник и придумал простой скрипт, чтобы нарисовать рамку вокруг поля «Заголовок» каждой записи и стилизовать текст. Я не могу заставить это работать. Есть ли шанс, что вы можете взглянуть на этот код для меня? Я использовал следующие токены в поле JSLink.

~собрание сайтов/сайт/папка/папка/файл.js

И

~сайт/папка/папка/файл.js

Файл .js хранится на том же сайте, что и веб-часть представления списка, которую я пытаюсь изменить. В списке есть только столбец «Заголовок» по умолчанию.

(function () {
            var overrideContext = {};
            overrideContext.Templates = {};
            overrideContext.Templates.Item = overrideTemplate;

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

function overrideTemplate(ctx) {
            return “<div style=’font-size:40px;border:solid 3px black;margin-bottom:6px;padding:4px;width:200px;’>” + ctx.CurrentItem.Title + “</div>”;
}

person Chris Lee    schedule 16.08.2017    source источник
comment
Что говорит ваша консоль??   -  person justDan    schedule 17.08.2017
comment
Для этого я всегда использую библиотеку siteassets. Можете ли вы убедиться, что на этой странице нет другой jslink? Потому что два скрипта jslink не могут существовать на одной странице одновременно.   -  person Sascha    schedule 30.08.2017


Ответы (1)


Похоже, вы пытаетесь переопределить сам элемент контекста (ctx), где на самом деле вы просто хотите переопределить поле списка и представление списка, в котором отображается поле. Есть смысл?

Во-первых, измените overrideContext.Templates.Item на overrideContext.Templates.Fields:

(function () {
            var overrideContext = {};
            overrideContext.Templates = {};
            overrideContext.Templates.Fields = {
            // Add field and point it to your rendering function
            "Title": { "View": overrideTemplate },
            };  
  SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideContext);
        }) ();

Затем, когда JSLink запускается, средство визуализации ищет поле «Заголовок» в представлении «Список» и применяет вашу функцию overrideTemplate.

function overrideTemplate(ctx) {
            return “<div style=’font-size:40px;border:solid 3px black;margin-bottom:6px;padding:4px;width:200px;’>” + ctx.CurrentItem.Title + “</div>”;
}

С точки зрения запуска нескольких JSLink на странице SharePoint вполне возможно запустить несколько сценариев JSLink, их просто нужно разделить вертикальной чертой '|' условное обозначение. Я часто использую SharePoint Online и постоянно вижу следующее форматирование (извините, Саша!).

~site/yourassetfolder/yourfilename.js | ~site/yourassetfolder/anotherfilename.js

Вы можете запускать столько скриптов одновременно, сколько хотите, просто продолжайте разделять их конвейером. Я также видел это на prem, однако вы можете заменить «~ сайты» на « ~ site collection» и убедиться, что файлы js, к которым вы обращаетесь, находятся на сайте верхнего уровня в семействе сайтов, если вы это сделаете!

Я заметил, что при запуске нескольких JSLink в списке или на странице, потому что все они выполняют рендеринг на стороне клиента, слишком много замедляют работу вашей страницы. Если это произойдет, вы можете захотеть объединить их в один сценарий JSLink, чтобы серверу нужно было вызвать только один файл, чтобы вернуться к клиенту, чтобы выполнить всю визуализацию, необходимую для вашего списка.

Надеюсь это поможет.

person Andy Bolam    schedule 26.10.2017