Мой скрипт JSLink не будет работать
Я пытаюсь использовать JSLink ... в конце концов... и у меня возникли некоторые проблемы, которые я не могу исправить. Для моего первого предприятия по кроличьей норе я выбрал что-то очень простое для использования в качестве доказательства концепции. Поэтому я посмотрел учебник и предложил простой сценарий, чтобы нарисовать рамку вокруг поля "Заголовок" каждой записи и оформить текст. Я не могу заставить это работать. Есть ли шанс, что вы можете посмотреть на этот код для меня? Я использовал следующие токены в окне JSLink.
~ sitecollection / сайт / папка / папка /file.js
А также
~ сайт / папка / папка /file.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>”;
}
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 запускается, средство визуализации ищет поле Title в представлении List и применяет вашу функцию 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>”;
}
С точки зрения запуска нескольких JSLinks на странице SharePoint, вполне возможно запустить несколько JSLink-скриптов, их просто нужно разделить каналом '|' условное обозначение. Я часто использую SharePoint Online и вижу, что все время работает следующее форматирование (извините, Саша!).
~site/yourassetfolder/yourfilename.js | ~site/yourassetfolder/anotherfilename.js
Вы можете запустить столько сценариев одновременно, сколько захотите, просто продолжайте разделять их конвейером. Я видел это и на прем, но вы можете поменять местами "~sites" для "sitecollection" и убедиться, что js-файлы, к которым вы обращаетесь, находятся на сайте верхнего уровня в семействе сайтов, если вы это сделаете!
Я заметил, что при запуске нескольких JSLink-ов в списке или на странице, поскольку все они выполняют рендеринг на стороне клиента, слишком многие из них замедляют работу вашей страницы. Если это произойдет, вы можете захотеть объединить их в один сценарий JSLink, чтобы серверу нужно было вызвать только один файл, чтобы вернуться к клиенту, чтобы выполнить всю визуализацию, необходимую для вашего списка.
Надеюсь это поможет.