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

7
在SharePoint 2010中,我已经将我的WebPart添加到列表(标准列表或文档库列表 - 这并不重要)。在此之后,“List Tools”选项卡不可见。经过一些挖掘,我发现即使我添加了标准的SharePoint WebParts也存在这个问题。
以下是同样的问题和描述如何复制它的方法: http://www.endusersharepoint.com/STP/viewtopic.php?f=10&t=2027 有人找到解决方案或真正的解决方法吗?
//编辑:我找到了一个“解决方案”。选项卡与“实际”的WebPart相关联。单击列表(以将焦点设置在其上),选项卡就会再次可见:D

你最终做了什么?我渴望一个好的解决方案! - bgmCoder
4个回答

13

当您将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 是什么意思?这不只是一遍又一遍地点击 Web 部件吗? - MgSam
不,他正在使用setTimeout而不是setIntervalsetInterval会使其重复执行。但是,我尝试过了,在我的情况下它没有起作用。 - Geeky Guy
我尝试过这个方法,它有点奏效(Sharepoint Server 2010)。页面加载后,整个功能区开始显示 - 如果您使用jquery来“点击”列表,则会得到相同的结果。更好的方法是在不自动打开功能区的情况下显示功能区选项卡。- 啊!看看@katrine的答案 - 它正是这样做的! - bgmCoder

8

这个方法对我很有效,但是它默认选中的是文档标签页,我更喜欢默认选中浏览标签页,所以我只需要在代码中添加一行简单的代码来重新选择默认标签:

        <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上几乎可以解决问题。页面加载后,我可以看到选项卡而不是整个选项卡打开;但是,如果我在选项卡或列表之外的屏幕上任何地方单击,选项卡会再次消失。 - bgmCoder
为什么要使用计时器呢?我尝试过不用计时器,似乎也能正常工作 - 不过,可以使用这个代替:_spBodyOnLoadFunctionNames.push(); - bgmCoder
我有同样的问题。如果我在列表外面点击,它就会消失。 - Kode

5

经过在调试器中反复步进分析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 Beta中:
//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() { };  

注意:这种方法非常不正式,而且Microsoft不支持(因此在以后的版本或可能是SharePoint 2013的RTM中很可能会更改)。

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

解释:它基本上重写了SP.Ribbon.WebPartComponent实例的取消选择Web部件的能力。据我了解,$3/$3_1属性存储对SP.Ribbon.WebPartComponent实例的引用。

如果有人知道除$3/$3_1属性之外访问SP.Ribbon.WebPartComponent实例的更好方法,请说出来,因为那将使该方法更加稳健。


4
点击列表(将焦点设置在其上)解决了这个“问题” ;)

我认为这应该是被接受的答案(至少对于Sharepoint在线)。 - fortuneRice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接