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

我正在使用 JSOM 来实现这一点。除了 get_isVisible() 函数外,一切正常。它总是返回真。 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());
    }

最佳答案

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

详细请引用"Hidden" property of SPNavigationNode

以下函数演示了如何检索隐藏节点 Urls:

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());
    });

关于sharepoint - SP.NavigationNode.get_isVisible() 坏了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21782183/

10-15 11:14