2014-02-14 3 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 Пожалуйста, обратитесь за подробную

Следующая функция показывает, как извлечь скрытый узел 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()); 
    }); 
+0

Это ничего не заманит, хотя у меня есть некоторые из пунктов навигации как скрытые. Любая подсказка? –