SharePoint - Отображать шаблоны - Доступ к клиентскому объекту контекста
Поэтому я создаю шаблоны отображения для SharePoint, и у меня возникают проблемы с получением контекста, поскольку он мне нужен для доступа к различным спискам и их элементам и т. Д. Один из способов сделать это, который я видел при поиске, заключается в следующем:
var context = Srch.ScriptApplicationManager.get_clientRuntimeContext();
Проблема в том, что я не знаю, как получить доступ к содержимому этого объекта. Каждый раз я получаю сообщение об ошибке, что контекст не определен или пуст, или я печатаю его буквальную функцию. В других программах (не шаблонах отображения) я бы просто использовал:
var context = new ClientContext();
или же
var context = new SP.ClientContext();
или какой-то вариант, но в этом случае я не могу найти документацию или примеры использования первого. Просто (в основном) блоги говорят, что вы можете использовать его, чтобы получить контекст.
Код, который у меня есть, в основном закомментирован на данный момент. Я просто пытаюсь выяснить этот контекст прямо сейчас. Заранее спасибо.
Редактировать:
Это весь (шаблон отображения элемента) файл:
<html lang="en" xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
<head>
<title>Marketing Page Item Template</title>
<!--[if gte mso 9]><xml>
<mso:CustomDocumentProperties>
<mso:TemplateHidden msdt:dt="string">0</mso:TemplateHidden>
<mso:MasterPageDescription msdt:dt="string">This is the item display template for the Marketing Page tasks. This will organize list/items under its practice.</mso:MasterPageDescription>
<mso:ContentTypeId msdt:dt="string">0x0101002039C03B61C64EC4A04F5361F385106603</mso:ContentTypeId>
<mso:TargetControlType msdt:dt="string">;#SearchResults;#;#Content Web Parts;#</mso:TargetControlType>
<mso:HtmlDesignAssociated msdt:dt="string">1</mso:HtmlDesignAssociated>
<mso:ManagedPropertyMapping msdt:dt="string">'Title'{Title}:'Title','Assigned To'{Assigned To}:'AssignedTo','Due Date'{Due Date}:'DueDateOWSDATE;DueDate','URL'{URL}:'URL'</mso:ManagedPropertyMapping msdt:dt="string">
</mso:CustomDocumentProperties>
</xml><![endif]-->
</head>
<body>
<div>
<!--#_
var siteURL = _spPageContextInfo.siteAbsoluteUrl;
var title = $getItemValue(ctx, "Title");
var assignedTo = $getItemValue(ctx, "Assigned To");
var dueDate = $getItemValue(ctx, "Due Date");
var listUrl = $getItemValue(ctx, "URL");
SP.SOD.executeFunc('SP.js', 'SP.ClientContext', function() {
var context = Srch.ScriptApplicationManager.get_clientRuntimeContext();
var reqCtx = SP.RequestContext.getCurrent(context);
var web = reqCtx.get_web();
var pagesListId = SP.PageContextInfo.get_pageListId();
var list = web.get_lists().getById(pagesListId);
var items = list.getItems(SP.CamlQuery.createAllItemsQuery());
context.load(items);
context.executeQueryAsync(
function(){
items.get_data().forEach(function(item){
console.log(item.get_item('FileRef'));
});
},
function(sender,args){
console.log(args.get_message());
});
});
_#-->
<li>
<div style="background-color: honeydew; margin: 5px; padding: 5px;">
<!--#_
if (!title.isEmpty)
{
_#-->
<h3 style="color: coral;">Title: _#= $htmlEncode(title) =#_</h3>
<!--<p>_#= $htmlEncode(ctx.CurrentItem.Title) =#_</p>-->
<p>URL: _#= $htmlEncode(listUrl) =#_</p>
<p>URL: _#= $htmlEncode(typeof reqCtx) =#_</p>
<!--#_
}
if (!assignedTo.isEmpty)
{
_#-->
<p style="color: goldenrod;">Assigned To: _#= $htmlEncode(assignedTo) =#_</p>
<!--<p>_#= $htmlEncode(ctx.CurrentItem.AssignedTo) =#_</p>-->
<!--#_
}
else
{
_#-->
<p>There is no assigned person!</p>
<!--#_
}
if (!dueDate.isEmpty)
{
_#-->
<p style="color: rosybrown;">Due Date: _#= $htmlEncode(dueDate) =#_</p>
<!--<p>_#= $htmlEncode(ctx.CurrentItem.DueDateOWSDATE) =#_</p>-->
<!--#_
}
else
{
_#-->
<p>There is no due date!</p>
<!--#_
}
_#-->
</div>
</li>
</div>
</body>
</html>
1 ответ
Srch.ScriptApplicationManager.get_clientRuntimeContext
функция возвращает SP.ClientRuntimeContext
объект, который представляет the runtime context for accessing data from and invoking methods on remote objects
В следующем примере показано, как получить элементы списка и распечатать URL-адреса страниц в шаблоне отображения:
var context = Srch.ScriptApplicationManager.get_clientRuntimeContext();
var reqCtx = SP.RequestContext.getCurrent(context);
var web = reqCtx.get_web();
var pagesListId = SP.PageContextInfo.get_pageListId(); //Pages List Id
var list = web.get_lists().getById(pagesListId);
var items = list.getItems(SP.CamlQuery.createAllItemsQuery());
context.load(items);
context.executeQueryAsync(
function(){
items.get_data().forEach(function(item){
console.log(item.get_item('FileRef'));
});
},
function(sender,args){
console.log(args.get_message());
});
Для обеспечения SP.ClientRuntimeContext
объект загружен, вы можете использовать SP.SOD.executeFunc
функция, например:
SP.SOD.executeFunc('SP.js', 'SP.ClientContext', function() {
var context = Srch.ScriptApplicationManager.get_clientRuntimeContext();
//the remaining code goes here...
});
Вариант 2. Использование SP.ClientContext
учебный класс
Следующий пример демонстрирует, как использоватьSP.ClientContext class
в шаблоне отображения:
SP.SOD.executeFunc('SP.js', 'SP.ClientContext', function() {
var context = SP.ClientContext.get_current();
var web = context.get_web();
var pagesListId = SP.PageContextInfo.get_pageListId();
var list = web.get_lists().getById(pagesListId);
var items = list.getItems(SP.CamlQuery.createAllItemsQuery());
context.load(items);
context.executeQueryAsync(
function(){
items.get_data().forEach(function(item){
console.log(item.get_item('FileRef'));
});
},
function(sender,args){
console.log(args.get_message());
});
});