Мой скрипт 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, чтобы серверу нужно было вызвать только один файл, чтобы вернуться к клиенту, чтобы выполнить всю визуализацию, необходимую для вашего списка.

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

Другие вопросы по тегам