将 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
而不是setInterval
。 setInterval
会让这种情况重演。但是,我试过了,但在我的情况下它不起作用。
我试过这个,它有点工作(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 部件添加到页面后,“列出工具”选项卡不再可用的主要内容,如果未能解决你的问题,请参考以下文章
如何将Web部件区域添加到SharePoint Wiki页面?