В SharePoint 2013 появилась отличная возможность кастомизации представления списка (а ещё полей на формах и т.д.) через Display Template (более глобально — CSR).
Однажды понадобилось добавить на страницу несколько представлений списка, а кастомизировать только одно. При этом, указывая свойство JSLink у веб-части представления, Display Template применяется ко всем веб-частям, отображающим нужный список!!!
UPD: это происходит из-за того, что свойство JSLink лишь подсоединяет нужный скрипт кастомизации на страницу, но не как не определяет целевой элемент, к которому нужно применить изменения.
Привожу решение, возможно не самое красивое и возможно не единственное:
Самовыполняемая функция инициализации Display Template:
(function () {
// Инициализируем переменные
var overrideCtx = {};
overrideCtx.Templates = {};
// Инициализируем переменные статичных блоков
overrideCtx.Templates.Header = "<div><h1>Информация</h1><table>";
// Применяем кастомный темплейт, он в функции
overrideCtx.Templates.Item = window.MyPartner.fieldItem.customItemHtml;
overrideCtx.Templates.Footer = "</table></div>";
// Устанавливаем Base view ID (свойство отвечает за нужное представление списка)
// Устанавливаем тип шаблона списка (если список кастомный, то скорее всего цифра изменится на вашу. У стандартного списка 100)
overrideCtx.BaseViewID = 1;
overrideCtx.ListTemplateType = 10000;
// здесь можно переопределить функции OnPreRender и OnPostRender. В последней можно, например, отсортировать элементы через JS
// Переопределяем функцию RenderListView после загрузки ClientTemplates.js
ExecuteOrDelayUntilScriptLoaded(function () {
//копируем текущую дефолтную реализацию RenderListView
var oldRenderListView = RenderListView;
//переопределяем
RenderListView = function (ctx, webPartID) {
//проверяем id списка, представление которого кастомизируем
if (ctx.listName == "{D42FBFC7-172C-417B-8AD0-3EF9383FA055}") {
//проверяем id предсвавления, которое кастомизируем
if (ctx.view !== "{F8364117-DF65-4C40-B537-E60FEFB914A9}") {
//если представление оказалось не тем, что нам нужно, то переопределяем BaseViewID
//к этому представлению Display Template не применится
ctx.BaseViewID = 99;
//window.console && console.log('Set BaseViewID: 99 ' + ctx.view);
}
}
//вызываем дефолтный RenderListView с изменённым контекстом ctx
oldRenderListView(ctx, webPartID);
}
}, "ClientTemplates.js");
// Регистрируем свою кастомизацию шаблона
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideCtx);
})();
По мотивам stackexchange:
http://sharepoint.stackexchange.com/questions/97410/jslink-for-multiple-list-views