Javascript SharePoint-显示模板-访问客户端上下文对象
因此,我正在为SharePoint创建显示模板,但在获取上下文时遇到了问题,因为我需要它来访问不同的列表及其项目等。我在搜索时看到的一种方法是:Javascript SharePoint-显示模板-访问客户端上下文对象,javascript,sharepoint,display-templates,Javascript,Sharepoint,Display Templates,因此,我正在为SharePoint创建显示模板,但在获取上下文时遇到了问题,因为我需要它来访问不同的列表及其项目等。我在搜索时看到的一种方法是: var context = Srch.ScriptApplicationManager.get_clientRuntimeContext(); 问题是我不知道如何从这个对象访问内容。每次我得到一个错误,上下文未定义或为空,或者我打印出它的文本函数。在其他程序(不是显示模板)中,我只会使用: var context = new ClientContex
var context = Srch.ScriptApplicationManager.get_clientRuntimeContext();
问题是我不知道如何从这个对象访问内容。每次我得到一个错误,上下文未定义或为空,或者我打印出它的文本函数。在其他程序(不是显示模板)中,我只会使用:
var context = new ClientContext();
或
或者一些变体,但在本例中,我找不到任何使用第一个的文档或示例。只是(大部分)博客说你可以用它来获取上下文
我的代码现在大部分都被注释掉了。我现在只是想弄清楚这个背景。提前谢谢
编辑:
这是整个(项目显示模板)文件:
营销页面项目模板
标题:#=$htmlEncode(标题)=#_
URL:#=$htmlEncode(列表URL)=#_
URL:#=$htmlEncode(请求的类型)=#_
分配给:#=$htmlEncode(分配给)=#_
没有指定人员
截止日期:#=$htmlEncode(截止日期)=#_
没有截止日期
Srch.ScriptApplicationManager.get_clientRuntimeContext
函数返回表示从远程对象访问数据和调用远程对象方法的运行时上下文
以下示例演示如何在显示模板中检索列表项和打印页面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.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());
});
});
为确保已加载,您可以利用,例如:
SP.SOD.executeFunc('SP.js', 'SP.ClientContext', function() {
var context = Srch.ScriptApplicationManager.get_clientRuntimeContext();
//the remaining code goes here...
});
选项2。使用SP.ClientContext
class
下面的示例演示如何在显示模板中使用:
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.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());
});
});
谢谢你的回复!我更新了帖子以显示整个代码。现在,问题出在reqCtx上——我通过控制台运行它,它一直说它未定义。我认为这可能与添加脚本/引用有关?你觉得怎么样?刚刚验证了提供的项目模板,它对我有效。。无论如何,答案已经更新,演示了如何利用
SP.ClientContext类
这就是我得到的关于上下文的确切错误消息:Uncaught TypeError:Cannot read undefinedSP.ListCollection.getById@SP.js?rev=hfV5Po3SUEMXr9lb64ZrsQ%3D%3D:2(匿名函数)@spr_item.js?ctag=2279$$15.0.4641.1000:36NotifyOnLoad.b@init.js?rev=rqhvyufurjxlbpgknmo0dca%3D%3D:1NotifyOnLoad@init.js?rev=rqhvyufurjxlbpgknmodca%3D%3D:1(匿名函数)@init.js?rev=rqhvyufurjxlbpgknmo0dca%3D%3D:1
我认为这与我目前的设置有关。再次感谢你!此SharePoint错误:未定义上下文(CoreRender:~sitecollection/\u catalogs/masterpage/Display Templates/Search/SPR\u Item.js)
出现错误。因此,我的上下文总是未定义的原因基本上是我使用了错误的引用。我停止使用.get_current()
,使用了完整的URL,现在可以使用了!很明显,显示模板本身有一个上下文?对吗?因为一旦我输入了URL,我就能够获得web、列表集合、项目等。谢谢<代码>变量上下文=新SP.ClientContext('https://...etc.');代码>