2010-08-31 112 views
1

任何人都知道如何让日历视图默认展开全部?看到了很多关于如何与SP 2007年而不是2010年SP日历默认全部展开

+0

我还没有找到我的问题的任何解决方案... – scrat789 2010-09-06 08:00:03

回答

1

不是最好的方法做到这一点,但它的工作原理,添加页面下面的脚本在CEWP或内联:

<script type="text/javascript"> 

_spBodyOnLoadFunctionNames.push("myFuncafterLoad"); 

function myFuncafterLoad(){var OldCalendarNotify4a = SP.UI.ApplicationPages.CalendarNotify.$4a;SP.UI.ApplicationPages.CalendarNotify.$4a = function(){myFunctoExpandCalendar();OldCalendarNotify4a();}} 

function myFunctoExpandCalendar(){try{var aTags=document.getElementsByTagName('A');for(i=0;i<aTags.length;i++){try{if(aTags[i].evtid=="expand_collapse"){aTags[i].click();break;}}catch(err){ alert('Bad Call at' + aTags[i].href);}}}catch(err){alert(err.message);}}</script> 

什么它确实是在日历加载后搜索第一个展开链接并模拟点击。

我不得不使用传统的Javascript,因为我不能使用JQuery触发点击,因为点击方法不是使用JQuery添加的。

让我知道,如果somefine找到更好的解决方案。

+1

这个脚本是不完美的。只有一行日历展开...我还没有找到其他解决方案。 – scrat789 2011-04-29 07:48:12

2

Kuldeep,感谢这个剧本!我稍微修改了它,通过删除中断并检查锚文本是否为“折叠”来展开日历的所有行。如果不是“崩溃”,则执行点击。请注意,您只需点击每行一个项目。否则,您可能会切换回折叠状态。

将CEWP添加到日历页面的另一个有问题的副作用是您失去了更改视图下拉菜单。您必须使用日历功能区来更改视图。

我也想找到一个更强大的解决方案,但这里是我的性能稍微改进方案:

这一个
<script type="text/javascript"> 

_spBodyOnLoadFunctionNames.push("myFuncAfterLoad"); 

function myFuncAfterLoad() { 
    var oldCalendarNotify4a = SP.UI.ApplicationPages.CalendarNotify.$4a; 

    SP.UI.ApplicationPages.CalendarNotify.$4a = function() { 
     oldCalendarNotify4a(); 
     myFuncToExpandCalendar(); 
    } 
} 

function myFuncToExpandCalendar() { 
    try { 
     var aTags = document.getElementsByTagName('A'); 
     for (i = 0; i < aTags.length; i++) { 

      if ((aTags[i].evtid == "expand_collapse") && (aTags[i].innerText != "collapse")) { 
       (aTags[i]).click(); 
      } 
     } 
    } 
    catch (err) { 
     alert(err.message); 
    } 
} 

</script> 
1

两个选项。在CEWP中粘贴以下一个或另一个:

第一个将覆盖用于在显示展开/折叠链接之前确定要显示多少项目的功能。我在下面的例子中将其设置为100,以确保在我的用例中,我甚至从来没有看到展开/折叠按钮,并且始终都会呈现每个项目。

<script type="text/javascript"> 

_spBodyOnLoadFunctionNames.push('WaitForCalendarToLoad'); 

function WaitForCalendarToLoad() 
{ 
    SP.UI.ApplicationPages.SummaryItemRenderer.prototype.$2u = function() 
    { 
      ULSvSp: ; 
      if (!this.$1A_1) this.$1A_1 = 100; 
      return this.$1A_1 
     } 
} 
</script> 

第二个选项将覆盖日历通知事件,让所有的物品都渲染后,该脚本将找到的第一个日历实例,并调用它的展开所有功能。这将确保每个单元格默认展开,但仍会显示折叠链接。

<script type="text/javascript"> 

_spBodyOnLoadFunctionNames.push('WaitForCalendarToLoad'); 

function WaitForCalendarToLoad() 
{ 
    var old$4a = SP.UI.ApplicationPages.CalendarNotify.$4a; 

    SP.UI.ApplicationPages.CalendarNotify.$4a = function() 
    { 
     old$4a(); 

     ctrl = SP.UI.ApplicationPages.CalendarInstanceRepository.firstInstance(); 

     if (ctrl) { 
      ctrl.expandAll(); 
     } 
    } 
} 
</script> 
+2

谢谢,安迪。这两种解决方案都很好。我只是想我会提到在$ SP1中$ 4a变成了$ 4b。 – 2012-02-28 14:37:04

+0

感谢你指出兰迪,我没有意识到这一点,我相信它很快就会咬我。 – 2012-03-02 11:03:47

-1
function expandCalendar() 
{ 
    var calendar = SP.UI.ApplicationPages.CalendarInstanceRepository.firstInstance(); 
    if (calendar && typeof calendar.expandAll === 'function') { 
     calendar.expandAll(); 
    }