将 Web 部件添加到页面后,“列出工具”选项卡不再可用

Posted

技术标签:

【中文标题】将 Web 部件添加到页面后,“列出工具”选项卡不再可用【英文标题】:"List Tools" tab is no longer available after adding webpart to the page 【发布时间】:2011-06-18 10:42:37 【问题描述】:

在 SharePoint 2010 中,我在列表上方添加了我的 webpart(标准列表或文档库列表 - 没关系)。在此“列表工具”选项卡不可见之后。经过一番挖掘,我发现即使添加标准 SharePoint WebPart 之一,该问题仍然存在。

这里是同样的问题和描述如何重现它: http://www.endusersharepoint.com/STP/viewtopic.php?f=10&t=2027

有没有人找到解决方案或真正的解决方法?

//编辑:我找到了一个“解决方案”。功能区与“实际”webpart 相连。单击列表(设置焦点),标签再次可见:D

【问题讨论】:

你最后做了什么?我渴望一个好的解决方案! 【参考方案1】:

当您将 Web 部件添加到标准列表视图时,该页面不再归类为列表视图页面,而是归类为应用程序页面。

这意味着您将丢失功能区菜单以及面包屑中的视图选择器。

更新

你可以看到隐藏视图选择器的代码:

Microsoft.SharePoint.WebControls.ListTitleViewSelectorMenu.SingleWebPartPresentOnPage

但我似乎找不到隐藏功能区的代码。

更新

好的,我认为这会起作用,使用以下代码添加 内容编辑器 Web 部件

<script>
setTimeout(function() 
    var elem = document.getElementById("MSOZoneCell_WebPartWPQ2");
    if(elem != null) 
        var dummyevent = new Array();
        dummyevent["target"] = elem;
        dummyevent["srcElement"] = elem;
        WpClick(dummyevent);
    
, 2000);
</script>

将 MSOZoneCell_WebPartWPQ2 id 替换为列表视图 Web 部件的 Web 部件区域单元格。

【讨论】:

当您说“这将起作用”时,Update 2 是什么意思。这不就是一遍遍点击webpart吗? 不,他使用的是setTimeout 而不是setIntervalsetInterval 会让这种情况重演。但是,我试过了,但在我的情况下它不起作用。 我试过这个,它有点工作(Sharepoint Server 2010)。页面加载后,整个功能区开始显示 - 如果您使用 jquery 在列表上“单击”,您会得到相同的结果。如果在不自动打开功能区的情况下显示功能区选项卡会更好。 - 啊!查看@katrine 的答案 - 就是这样做的!【参考方案2】:

点击列表(设置焦点)解决了“问题”;)

【讨论】:

我认为这应该是公认的答案(至少对于 Sharepoint 在线)。【参考方案3】:

在调试器中对 SharePoint JS 进行了大量单步调试后,我终于找到了防止此问题的方法。

在 SharePoint 2010 中:

//Set focus on our list web part
var webPart = document.getElementById('WebPartWPQ1');
WpClick(target: webPart);

//Prevent it from losing focus
SP.Ribbon.WebPartComponent.$3_1.deselectWebPartAndZone = function()  ;

在 SharePoint 2013 测试版中:

//Set focus on our list web part
var webPart = document.getElementById('MSOZoneCell_WebPartWPQ2');
WpClick(target: webPart);

//Prevent it from losing focus
SP.Ribbon.WebPartComponent.$3.deselectWebPartAndZone = function()  ;  

注意:这是超级hacky,Microsoft 绝不支持(因此它很可能在未来版本甚至可能在SharePoint 2013 的RTM 中发生变化)。

另外,请注意您的 Web 部件 ID 可能不同,因此您应该仔细检查您是否将焦点放在正确的 Web 部件上。

说明:它基本上覆盖了SP.Ribbon.WebPartComponent 取消选择Web 部件的能力的实例。据我所知,$3/$3_1 属性存储了对SP.Ribbon.WebPartComponent 实例的引用。

如果有人知道除了 $3/$3_1 属性之外还有更好的方法来访问 SP.Ribbon.WebPartComponent 的实例,请说出来,因为这会使这个方法更加健壮。

【讨论】:

【参考方案4】:

这对我有用,但它从选择的文档选项卡开始,我更喜欢选择默认的浏览选项卡,所以我只是在代码中添加了一个简单的行,请重新选择默认选项卡:

        <script>
        setTimeout(function() 
        var elem = document.getElementById("MSOZoneCell_WebPartWPQ2");
           if(elem != null) 
                var dummyevent = new Array();
                dummyevent["target"] = elem;
                dummyevent["srcElement"] = elem;
                WpClick(dummyevent);
                _ribbonStartInit("Ribbon.Browse", true)
            
        , 2000);
        </script> 

【讨论】:

啊!这似乎在我的 Sharepoint Server 2010 上几乎成功了。页面加载后,我可以看到功能区选项卡,而无需打开整个功能区;但是,如果我在功能区或列表之外的屏幕上单击任意位置,功能区选项卡会再次消失。 为什么要设置计时器?我在没有计时器的情况下尝试了它,它似乎也能正常工作 - 好吧,那就是:`_spBodyOnLoadFunctionNames.push();` 我也有同样的问题。如果我在列表之外单击,它就会消失。

以上是关于将 Web 部件添加到页面后,“列出工具”选项卡不再可用的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5,将文本添加到选项卡不起作用

如何将Web部件区域添加到SharePoint Wiki页面?

无法将 Web 部件添加到 SharePoint 页面

将 WebPart 添加到应用程序页面

将 Web 部件连接应用于其他 Web 部件的 ascx 页面上的 Web 部件

为啥 Web 部件在第一次添加到页面时会在构造函数上失败?