2014-02-14 151 views
3

我需要阅读“Top Nav”,“Children Nodes”并检查每个节点是否可见。SP.NavigationNode.get_isVisible()被破坏?

我正在使用JSOM来完成此操作。除了get_isVisible()函数之外,一切工作都很好。它总是返回true。 MSDN:http://msdn.microsoft.com/en-us/library/office/jj246297.aspx

我在2013年的一个发布网站,我知道一些项目是隐藏的。 (我的网页和背景的这个片段之外定义)

var visParents = [], visChildren = []; 
    var topNodes = web.get_navigation().get_topNavigationBar(); 
    context.load(topNodes); 
    context.executeQueryAsync(onQuerySucceeded, onQueryFailed) 

    function onQuerySucceeded() { 
      var nodeInfo = ''; 
      var nodeEnumerator = topNodes.getEnumerator(); 
      while (nodeEnumerator.moveNext()) { 
       var node = nodeEnumerator.get_current(); 
       nodeInfo += node.get_title() + '\n'; 
       if (node.get_isVisible()) 
        visParents.push(node); 
      } 
      console.log("Current nodes: \n\n" + nodeInfo); 
      console.log("Visible Parents", visParents) 
    } 

    function onQueryFailed(sender, args) { 
      alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); 
    } 

回答

3

这是一个众所周知的问题,似乎SP.NavigationNode.isVisible property不对应,指示导航节点是隐藏或显示属性。

请参考"Hidden" property of SPNavigationNode的细节

下面的函数演示如何检索隐藏节点的url:

function getGlobalNavigationExcludedUrls(Success,Error) 
{ 
    var context = new SP.ClientContext.get_current(); 
    var web = context.get_web(); 
    var subwebs = web.get_webs(); 
    var pagesList = web.get_lists().getByTitle("Pages"); 
    var pageItems = pagesList.getItems(SP.CamlQuery.createAllItemsQuery()); 
    var allProperties = web.get_allProperties(); 
    context.load(web); 
    context.load(subwebs); 
    context.load(allProperties); 
    context.load(pageItems); 
    context.executeQueryAsync(
     function() { 
      var excludedIds = allProperties.get_item('__GlobalNavigationExcludes').split(';'); 
      var exludedUrls = []; 
      for (var i = 0; i < excludedIds.length - 1; i++) 
      { 
       for (var j = 0; j < subwebs.get_count(); j++) 
       { 
        var subweb = subwebs.getItemAtIndex(j); 
        if(subweb.get_id().toString() == excludedIds[i]){ 
         exludedUrls.push(subweb.get_serverRelativeUrl()); 
         break; 
        } 
       } 
       for (var j = 0; j < pageItems.get_count(); j++) 
       { 
        var pageItem = pageItems.getItemAtIndex(j); 
        if(pageItem.get_item('UniqueId').toString() == excludedIds[i]){ 
         exludedUrls.push(web.get_serverRelativeUrl() + pageItem.get_item('FileRef')); 
         break; 
        } 
       } 
      }  
      Success(exludedUrls);   
     }, 
     Error 
    ); 
} 

//Usage: print excluded nodes Urls 
getGlobalNavigationExcludedUrls(function(excludedNodeUrls){ 
     for (var j = 0; j < excludedNodeUrls.length; j++) 
     { 
      console.log(excludedNodeUrls[j]); 
     }  
    }, 
    function(sender,args){ 
     console.log(args.get_message()); 
    }); 
+0

它不取任何东西,虽然我有一些导航的项目为隐藏。任何线索? –