SP.NavigationNode.get_isVisible()坏了吗?

时间:2014-02-14 14:38:09

标签: sharepoint sharepoint-2013

我需要阅读“Top Nav”,“Children Nodes”并检查每个节点是否可见。

我正在使用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());
    }

1 个答案:

答案 0 :(得分: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());
    });