Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SharePoint-显示模板-访问客户端上下文对象_Javascript_Sharepoint_Display Templates - Fatal编程技术网

Javascript SharePoint-显示模板-访问客户端上下文对象

Javascript SharePoint-显示模板-访问客户端上下文对象,javascript,sharepoint,display-templates,Javascript,Sharepoint,Display Templates,因此,我正在为SharePoint创建显示模板,但在获取上下文时遇到了问题,因为我需要它来访问不同的列表及其项目等。我在搜索时看到的一种方法是: var context = Srch.ScriptApplicationManager.get_clientRuntimeContext(); 问题是我不知道如何从这个对象访问内容。每次我得到一个错误,上下文未定义或为空,或者我打印出它的文本函数。在其他程序(不是显示模板)中,我只会使用: var context = new ClientContex

因此,我正在为SharePoint创建显示模板,但在获取上下文时遇到了问题,因为我需要它来访问不同的列表及其项目等。我在搜索时看到的一种方法是:

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.');