SharePoint Online için Gezinti Seçenekleri

Bu makalede, arama odaklı Gezinti veya yönetilen kullanarak sayfa yükleme süreleri için SharePoint Online iyileştirmek açıklanır.

Not:  En güncel yardım içeriklerini, mümkün olduğunca hızlı biçimde kendi dilinizde size sunmak için çalışıyoruz. Bu sayfanın çevirisi otomasyon aracılığıyla yapılmıştır ve bu nedenle hatalı veya yanlış dil bilgisi kullanımları içerebilir. Amacımız, bu içeriğin sizin için faydalı olabilmesini sağlamaktır. Buradaki bilgilerin faydalı olup olmadığını bu sayfanın sonunda bize bildirebilir misiniz? Kolayca başvurabilmek için İngilizce makaleye buradan ulaşabilirsiniz .

Genel gezinti ve yapısal gezintiyi yapılandırmak için gerekli sorguları sayfalarınızın daha yavaş da SharePoint Online Yükleme yapabilirsiniz. SQL server için her biri bu sorguları başka bir istek gönderir olmasıdır. Her site ve sahip olduğunuz alt site için daha fazla istekleri için SQL server üretilmiştir. Bu sorun, ana sayfalar da etkiler. Bu genel gezinti de etkilenen anlamına gelir.

Bazı SharePoint sitelerinde büyük ve karmaşık yapıları gerektirir. İçerik sorgulamadan kullanır, kullanıma hazır yapısal gezintiyi kullanarak birden çok site katmanları nedeniyle yavaş sayfa yükleme süreleri neden olabilir. Her katmanların alt sitelerin de başka bir sorgu oluşturur.

İki ana kullanıma hazır Gezinti Seçenekleri SharePoint hem de üçüncü, özel, arama odaklı yaklaşım vardır. Her seçenek Artıları ve eksileri aşağıdaki tabloda özetlendiği gibi bulunur.

Yapısal gezintiyi

Yönetilen Gezinti

Arama tabanlı gezinti

Uzmanları için:

  • Kolay yapılandırmak

  • Güvenlik kırpılır

  • Siteler eklenmiş olarak otomatik olarak güncelleştirir

Uzmanları için:

  • Kolay korumak

Uzmanları için:

  • Güvenlik kırpılır

  • Siteler eklenmiş olarak otomatik olarak güncelleştirir

  • Fast zaman ve yerel olarak önbelleğe alınmış gezinti yapısını yükleme

Eksileri:

  • Karmaşık site yapısıyla kötü gerçekleştirebilir

Eksileri:

  • Site yapısını yansıtacak şekilde otomatik olarak güncelleştirme

Eksileri:

  • Kolayca sipariş sitelerine hiçbir özelliği

  • Ana sayfayı (gerekli teknik becerilere) özelleştirmesini gerektirir

Çok sayıda alt sitelerin bir siteniz varsa ve yapısal gezintiyi kullanıyorsanız, yavaşlatıyor sayfanıza önemli ölçüde yükler. Siteniz için en uygun seçeneği teknik yapabileceklerinizden ve site gereksinimlerinize üzerinde bağlıdır. Özel ana sayfa kullanma rahat ve varsayılan ana sayfayı SharePoint Online için ortaya çıkabilecek değişiklikleri korumak için kuruluşunuzdaki bazı özelliği varsa, arama odaklı seçeneği en iyi kullanıcı deneyimi üretir. Ardından yönetilen gezintiyi kullanıma hazır yapısal gezintiyi ve arama arasında basit bir orta Karayolu isterseniz, çok iyi bir seçenektir. Yönetilen Gezinti seçeneği yoluyla tutulabilir yapılandırma kodu özelleştirme dosyaları kapsayan değil ve kullanıma hazır yapısal gezintiyi önemli ölçüde hızlıdır.

Var olan sitede çözümlemek ve gezinti öğeleri ve alt siteleri gerekli sayısını azaltmak için başka bir yaklaşım olur. İyi site yapısını ve gezinti değil sürece çok karmaşık yapısal gezintiyi gerçekleştirir olmasıdır.

Bu makalede, bir örnek site koleksiyonundaki çeşitli yaklaşımlar karşılaştırır. Örnek site koleksiyonu 11 alt sitelerin ve her alt sitenin en az dört ek alt sitelerin sahiptir.

PowerPoint Giriş sekmesi, Biçim grubu

SharePoint Online'da yapısal gezintiyi kullanma

Bu varsayılan olarak kullanılan kullanıma hazır gezinti ve en basit ve uygun çözüm çoğu durumda olur. Karmaşık bir yapı birden fazla alt veya alt sitelerin birçok düzeyi sürece, yapısal gezintiyi de gerçekleştirir. Bu güvenlik kırpılmış yeni siteler eklendiğinde, otomatik olarak güncelleştirir ve ana sayfanın herhangi bir özelleştirmeye gerektirmez olduğunu Bu yaklaşımın ana yapabilmenizi sağlar. Ayrıca kolayca teknik olmayan bir kullanıcı öğe ekleme, öğeleri gizlemek ve Gezinti Ayarları sayfasından yönetme.

SharePoint Online'da yapısal gezintiyi açma

Performans yapısal gezintiyi ve Göster ile standart bir SharePoint Online çözümde seçeneği nasıl alt sitesi göstermek için açıktır. Bir ekran Site Ayarları sayfasında bulunan ayarlar aşağıda görüntüsü olduğu > Gezinti.

Posta Ara sekmesi, grup 2

SharePoint Online'da yapısal gezintiyi performansını çözümleme

Bir SharePoint sayfası performansını çözümlemek için Internet Explorer'da F12 Geliştirici Araçları'nın sekmesini kullanın.

Screenshot showing F12 dev tools Network tab

sekmesinde, yüklenmekte .aspx sayfası'nı tıklatın ve sonra Ayrıntılar sekmesinde tıklatın.

Web tarayıcısı formlarında kullanılamayan InfoPath 2010 özellikleri

Yanıt üst bilgileri’ne tıklayın.

Screenshot of Details tab

SharePoint kendi yanıt üstbilgilerinde bazı yararlı tanılama bilgileri verir. En kullanışlı sunucudaki işlemi için ne kadar süreyle bir istek geçen milisaniye cinsinden, değer, vurgulayan mavi Kutucu    biridir.

Alt siteleri göster görüntüsü aşağıdaki ekranda yapısal gezintiyi seçili değildir. Genel gezinti bölmesinde yalnızca site koleksiyonu bağlantısı olduğu anlamına gelir:

Screenshot showing load times as request duration

Vurgulayan mavi Kutucu    anahtar 245 milisaniyelik bir değere sahip. Bu isteği dönmek için geçen süre temsil eder. Sitede yalnızca bir gezinti öğesi olduğundan, yoğun Gezinti SharePoint Online'nasıl gerçekleştirir için iyi bir Kıyaslama budur. Sonraki ekran görüntüsünde, bu anahtar alt sitelerde ekleme nasıl etkilediğini gösterilir.

Screenshot showing a request duration of 2502 ms

Alt siteler ekleme, sayfa isteği dönmek için gereken süre önemli ölçüde artırdı.

Normal yapılandırılmış Gezinti kullanmanın yararları, kolayca sırasını düzenleme, siteler gizlemek, sayfalar ekleyin, sonuçları güvenlik kırpılır ve, SharePoint Online'da kullanılan desteklenen ana sayfadan deviating değil olmadığını olur. Sitenizi dikkatle yapılandırmak ve alt siteler site koleksiyonunuzda en aza indirmek istiyorsanız yapısal gezintiyi de gerçekleştirir.

Yönetilen gezinti ve yönetilen meta verileri SharePoint Online'da kullanma

Yönetilen Gezinti yapısal gezintiyi olarak işlevselliği ile aynı tür yeniden oluşturmak için kullanabileceğiniz başka bir kullanıma hazır seçenektir.

Yönetilen Meta veri kullanmanın avantajı, site gezintisi oluşturmak için sorgu tarafından içeriği tablolarından veri almak için daha hızlı olmasıdır. Çok hızlı bir yolu yoktur Kırp güvenliğine sonuçları olsa nedenle belirli bir siteye erişim bir kullanıcı yoksa bağlantıyı yine gösterilir ancak hata iletisine yol gösterecektir.

Yönetilen gezinti ve sonuçları gerçekleştirme   

Birkaç makale TechNet'teki yönetilen Gezinti ayrıntılarını Örneğin, SharePoint Server 2013'te yönetilen Gezinti genel bakışkonusuna bakın.

Yönetilen Gezinti uygulamak için yönetici izinleri depolamak terim olması gerekir. Site koleksiyonu yapısı URL'leri terimlerle ayarlayarak, yönetilen Gezinti yapısal gezintiyi değiştirmek için kullanılabilir. Örneğin:

Screenshot of Subsite1 example

Aşağıdaki örnek yönetilen Gezinti kullanarak karmaşık Gezinti performansını gösterir.

Screenshot of SPRequestDuration example

Yönetilen Gezinti tutarlı bir şekilde kullanarak içeriğe göre sorgu yapısal gezintiyi yaklaşım karşılaştırıldığında performansı artırır.

Arama temelli istemci tarafı komut dosyası kullanma

Aramayı kullanarak sürekli gezinme kullanarak arka planda yerleşik dizinler yararlanabileceğiniz. Bu yoğun içerik sorgu yok anlamına gelir. Arama sonuçlarında arama dizinden alınır ve güvenlik kırpılmış sonuçlardır. Normal içerik sorguları göre daha hızlı budur. Yapısal gezintiyi arama kullanarak, özellikle de karmaşık site yapısı, varsa yüklenme zamanı önemli ölçüde sayfa yukarı hızlandırır. Yönetilen Gezinti üzerinden ana avantajı, bu güvenlik kırpması'ndan yararlı olur.

Bu yaklaşımın bir özel ana sayfa oluşturma ve özel HTML ile kullanıma hazır gezinti kodu değiştirme kapsar. Dosya seattle.html Gezinti kodunda değiştirmek için bu yordamı izleyin.

Bu örnekte, seattle.html dosyayı açın ve tüm öğe Değiştir Kimliği "DeltaTopNavigation" = özel HTML kodu ile.

Örnek: bir ana sayfa kullanıma hazır Gezinti kodunda değiştirmek için

  1. Site Ayarları sayfasına gidin.

  2. Ana Sayfa Galerisi, Ana sayfalar' ı tıklatarak açın.

  3. Buradan kitaplığı gidin ve seattle.masterdosyasını indirin.

  4. Bir metin düzenleyicisi kullanılarak kodunu düzenleme ve aşağıdaki ekran kod bloğunda silin.

    Dosyalarınızı buluta kaydetme
  5. Arasında yer alan kodunu kaldırma < SharePoint:AjaxDelta kimliği "DeltaTopNavigation" = > ve < \SharePoint:AjaxDelta > etiketler ve aşağıdaki parçacığı ile değiştirin:

    <div id="loading">
      <!--Replace with path to loading image.-->
      <div style="background-image: url(''); height: 22px; width: 22px; ">
      </div>
    </div>
    <!-- Main Content-->
    <div id="navContainer" style="display:none">
        <div data-bind="foreach: hierarchy" class="noindex ms-core-listMenu-horizontalBox">
            <a class="dynamic menu-item ms-core-listMenu-item ms-displayInline ms-navedit-linkNode" data-bind="attr: { href: item.Url, title: item.Title }">
                <span class="menu-item-text" data-bind="text: item.Title">
                </span>
            </a>
            <ul id="menu" data-bind="foreach: $data.children" style="padding-left:20px">
                <li class="static dynamic-children level1">
                    <a class="static dynamic-children menu-item ms-core-listMenu-item ms-displayInline ms-navedit-linkNode" data-bind="attr: { href: item.Url, title: item.Title }">
                   
                     <!-- ko if: children.length > 0-->
                        <span aria-haspopup="true" class="additional-background ms-navedit-flyoutArrow dynamic-children">
                            <span class="menu-item-text" data-bind="text: item.Title">
                            </span>
                        </span>
                    <!-- /ko -->
                    <!-- ko if: children.length == 0-->   
                        <span aria-haspopup="true" class="ms-navedit-flyoutArrow dynamic-children">
                            <span class="menu-item-text" data-bind="text: item.Title">
                            </span>
                        </span>
                    <!-- /ko -->   
                    </a>
                   
                    <!-- ko if: children.length > 0-->                                                       
                    <ul id="menu"  data-bind="foreach: children;" class="dynamic  level2" >
                        <li class="dynamic level2">
                            <a class="dynamic menu-item ms-core-listMenu-item ms-displayInline  ms-navedit-linkNode" data-bind="attr: { href: item.Url, title: item.Title }">
             
              <!-- ko if: children.length > 0-->
              <span aria-haspopup="true" class="additional-background ms-navedit-flyoutArrow dynamic-children">
               <span class="menu-item-text" data-bind="text: item.Title">
               </span>
              </span>
               <!-- /ko -->
              <!-- ko if: children.length == 0-->
              <span aria-haspopup="true" class="ms-navedit-flyoutArrow dynamic-children">
               <span class="menu-item-text" data-bind="text: item.Title">
               </span>
              </span>                 
              <!-- /ko -->   
                            </a>
              <!-- ko if: children.length > 0-->
             <ul id="menu" data-bind="foreach: children;" class="dynamic level3" >
              <li class="dynamic level3">
               <a class="dynamic menu-item ms-core-listMenu-item ms-displayInline ms-navedit-linkNode" data-bind="attr: { href: item.Url, title: item.Title }">
                <span class="menu-item-text" data-bind="text: item.Title">
                </span>
               </a>
              </li>
             </ul>
               <!-- /ko -->
                        </li>
                    </ul>
                    <!-- /ko -->
                </li>
            </ul>
        </div>
    </div>
  6. Yükleme URL'de Değiştir bağlama etiketi başında bir yükleme görüntüsü site koleksiyonunuzda bağlantısı olan görüntü. Değişikliklerinizi yaptıktan sonra dosyayı yeniden adlandırın ve sonra ana sayfa Galerisi'ne karşıya yükleyin. Bu yeni .master dosyası oluşturur.

  7. Bu HTML, JavaScript kodundan arama sonuçları tarafından doldurulan temel bir Satış marjı eşittir. Aşağıdaki kod parçası gösterildiği şekilde var root = “site collection URL değerini değiştirmek için aşağıdaki kodu düzenlemeniz gerekir:

    var root = “https://spperformance.sharepoint.com/sites/NavigationBySearch”;

    Dosyanın tamamını JavaScript aşağıdaki gibidir:

    //Models and Namespaces
    var SPOCustom = SPOCustom || {};
    SPOCustom.Models = SPOCustom.Models || {}
    SPOCustom.Models.NavigationNode = function () {
    
        this.Url = ko.observable("");
        this.Title = ko.observable("");
        this.Parent = ko.observable("");
    
    };
    
    var root = "https://spperformance.sharepoint.com/sites/NavigationBySearch";
    var baseUrl = root + "/_api/search/query?querytext=";
    var query = baseUrl + "'contentClass=\"STS_Web\"+path:" + root + "'&trimduplicates=false&rowlimit=300";
    
    var baseRequest = {
        url: "",
        type: ""
    };
    
    
    //Parses a local object from JSON search result.
    function getNavigationFromDto(dto) {
        var item = new SPOCustom.Models.NavigationNode();
        if (dto != undefined) {
    
            var webTemplate = getSearchResultsValue(dto.Cells.results, 'WebTemplate');
    
            if (webTemplate != "APP") {
                item.Title(getSearchResultsValue(dto.Cells.results, 'Title')); //Key = Title
                item.Url(getSearchResultsValue(dto.Cells.results, 'Path')); //Key = Path
                item.Parent(getSearchResultsValue(dto.Cells.results, 'ParentLink')); //Key = ParentLink
            }
    
        }
        return item;
    }
    
    function getSearchResultsValue(results, key) {
    
        for (i = 0; i < results.length; i++) {
            if (results[i].Key == key) {
                return results[i].Value;
            }
        }
        return null;
    }
    
    //Parse a local object from the serialized cache.
    function getNavigationFromCache(dto) {
        var item = new SPOCustom.Models.NavigationNode();
    
        if (dto != undefined) {
    
            item.Title(dto.Title);
            item.Url(dto.Url);
            item.Parent(dto.Parent);
        }
    
        return item;
    }
    
    /* create a new OData request for JSON response */
    function getRequest(endpoint) {
        var request = baseRequest;
        request.type = "GET";
        request.url = endpoint;
        request.headers = { ACCEPT: "application/json;odata=verbose" };
        return request;
    };
    
    /* Navigation Module*/
    function NavigationViewModel() {
        "use strict";
        var self = this;
        self.nodes = ko.observableArray([]);
        self.hierarchy = ko.observableArray([]);;
        self.loadNavigatioNodes = function () {
            //Check local storage for cached navigation datasource.
            var fromStorage = localStorage["nodesCache"];
            if (false) {
                var cachedNodes = JSON.parse(localStorage["nodesCache"]);
    
                if (cachedNodes && timeStamp) {
                    //Check for cache expiration. Currently set to 3 hrs.
                    var now = new Date();
                    var diff = now.getTime() - timeStamp;
                    if (Math.round(diff / (1000 * 60 * 60)) < 3) {
    
                        //return from cache.
                        var cacheResults = [];
                        $.each(cachedNodes, function (i, item) {
                            var nodeitem = getNavigationFromCache(item, true);
                            cacheResults.push(nodeitem);
                        });
    
                        self.buildHierarchy(cacheResults);
                        self.toggleView();
                        addEventsToElements();
                        return;
                    }
                }
            }
            //No cache hit, REST call required.
            self.queryRemoteInterface();
        };
    
        //Executes a REST call and builds the navigation hierarchy.
        self.queryRemoteInterface = function () {
            var oDataRequest = getRequest(query);
            $.ajax(oDataRequest).done(function (data) {
                var results = [];
                $.each(data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results, function (i, item) {
    
                    if (i == 0) {
                        //Add root element.
                        var rootItem = new SPOCustom.Models.NavigationNode();
                        rootItem.Title("Root");
                        rootItem.Url(root);
                        rootItem.Parent(null);
                        results.push(rootItem);
                    }
                    var navItem = getNavigationFromDto(item);
                    results.push(navItem);
                });
                //Add to local cache
                localStorage["nodesCache"] = ko.toJSON(results);
    
                localStorage["nodesCachedAt"] = new Date().getTime();
                self.nodes(results);
                if (self.nodes().length > 0) {
                    var unsortedArray = self.nodes();
                    var sortedArray = unsortedArray.sort(self.sortObjectsInArray);
    
                    self.buildHierarchy(sortedArray);
                    self.toggleView();
                    addEventsToElements();
                }
            }).fail(function () {
                //Handle error here!!
                $("#loading").hide();
                $("#error").show();
            });
        };
        self.toggleView = function () {
            var navContainer = document.getElementById("navContainer");
            ko.applyBindings(self, navContainer);
            $("#loading").hide();
            $("#navContainer").show();
    
        };
        //Uses linq.js to build the navigation tree.
        self.buildHierarchy = function (enumerable) {
            self.hierarchy(Enumerable.From(enumerable).ByHierarchy(function (d) {
                return d.Parent() == null;
            }, function (parent, child) {
                if (parent.Url() == null || child.Parent() == null)
                    return false;
                return parent.Url().toUpperCase() == child.Parent().toUpperCase();
            }).ToArray());
    
            self.sortChildren(self.hierarchy()[0]);
        };
    
    
        self.sortChildren = function (parent) {
    
            // sjip processing if no children
            if (!parent || !parent.children || parent.children.length === 0) {
                return;
            }
    
            parent.children = parent.children.sort(self.sortObjectsInArray2);
    
            for (var i = 0; i < parent.children.length; i++) {
                var elem = parent.children[i];
    
                if (elem.children && elem.children.length > 0) {
                    self.sortChildren(elem);
                }
            }
        };
    
        // ByHierarchy method breaks the sorting in chrome and firefix 
        // we need to resort  as ascending
        self.sortObjectsInArray2 = function (a, b) {
            if (a.item.Title() > b.item.Title())
                return 1;
            if (a.item.Title() < b.item.Title())
                return -1;
            return 0;
        };
    
    
        self.sortObjectsInArray = function (a, b) {
            if (a.Title() > b.Title())
                return -1;
            if (a.Title() < b.Title())
                return 1;
            return 0;
        }
    }
    
    //Loads the navigation on load and binds the event handlers for mouse interaction.
    function InitCustomNav() {
        var viewModel = new NavigationViewModel();
        viewModel.loadNavigatioNodes();
    }
    
    function addEventsToElements() {
        //events.
    

    $("li.level1") .mouseover(function () {
              var konum = $(this).position();
              $(Bu).find("ul.level2").css ({genişliği: 100, sol: position.left + 10, en iyi: 50});

    })
       .mouseout(function () {
         $(Bu).find("ul.level2").css ({sol:-99999, üst: 0});

        });

         $("li.level2") .mouseover(function () {
              var konum = $(this).position();
              Console.log(JSON.stringify(Position));
              $(Bu).find("ul.level3").css ({genişliği: 100, sol: position.left + 95, en iyi: position.top});        

    })
       .mouseout(function () {
         $(Bu).find("ul.level3").css ({sol:-99999, üst: 0});
        });

    } _spBodyOnLoadFunctionNames.push("InitCustomNav");

    Yukarıda jQuery $(document).ready işlevinde oluşturulan bir viewModel nesnesi ve sonra loadNavigationNodes() işlevi, nesne üzerinde gösterilen kodu Özet olarak adlandırılır. Bu işlev ya da istemci tarayıcının HTML5 yerel depolaması'nda depolanan önceden oluşturulmuş Gezinti hiyerarşisinde yükler veya işlevi queryRemoteInterface()arar.

    QueryRemoteInterface() komut dosyasında tanımlanmış sorgu parametresi getRequest() işlevini kullanarak bir isteği oluşturur ve sonra veri sunucudan getirir. Bu veri temelde veri aktarma nesneleri çeşitli özelliklere sahip olarak gösterilen site koleksiyonundaki tüm sitelerde dizisidir. Bu veri sonra Knockout.js observable özelliklerini kullanmak için oluşturmak için kullanabileceğiniz önceden tanımlı SPO.Models.NavigationNode nesnelerin içine veri değerleri, önceden tanımlanmış HTML'e bağlama göre ayrıştırılmış. Nesneleri sonra sonuçları dizisine yerleştirilir. Bu dizi Boşalt'ı kullanarak JSON ayrıştırılmış ve gelecekteki sayfa yüklerinin üzerinde iyileştirilmiş performans için yerel tarayıcıya depolama saklanır.

  8. Daha sonra sonuçları self.nodes dizi atanır ve hiyerarşi çıktı için bir dizi self.heirarchyatama linq.js kullanarak nesneleri oturumunu üretilmiştir. Bu dizi HTML'ye bağlı nesnesidir. Bu toggleView() işlevinde ko.applyBinding() işlevinin self nesneyi aktararak yapılır. Bunun için aşağıdaki HTML bağlanacak hiyerarşi dizi sonra neden olur:

    <div data-bind=”foreach: hierarchy” class=”noindex ms-core-listMenu-horizontalBox”>

    Son olarak, mouseenter ve mouseexit için olay işleyicisi hangi addEventsToElements() işlevinde yapılır alt site açılan menüler işlemek için en üst düzey Gezinti eklenir.

    Gezinti sonuçlarını altındaki ekran görülebilir:

    Screenshot of navigation results

    Karmaşık Gezinti örneğimizde yeni bir sayfa sunucuda harcanan zamanı yerel önbelleğe alma gösterir olmadan yük yönetilen Gezinti yaklaşım olarak benzer bir sonucu elde etmek için Kıyaslama yapısal gezintiyi gelen kesildiği.

    SharePoint 2013’ün Paylaş, Düzenle, Bul, Oluştur ve Yönet özelliklerinin bloklarını vurgulayan mavi kutucu serisi.

    Bir ana Bu yaklaşımın avantajı HTML5 yerel depolama kullanarak gezinti yerel olarak kullanıcı için bunlar sayfa yükleme gelecek sefer depolandığını olur.

Biz önemli performans geliştirmeleri API arama için yapısal gezintiyi kullanmalarını alın; Bununla birlikte, çalıştırıp bu işlevsellik özelleştirmek için bazı teknik yeteneği götürür. Örnek uygulamasında siteleri ile kullanıma hazır yapısal gezintiyi aynı şekilde sıralanır; alfabetik sırayla. Bu sırasından sapma isteseydiniz, geliştirmek ve korumak daha karmaşık olacaktır. Ayrıca, bu yaklaşım desteklenen ana sayfalardan sapma gerektirir. Özel ana sayfa değil korunuyorsa, sitenizi yanıtsız out güncelleştirmeleri ve Microsoft ana sayfalarına yaptığı geliştirmeleri açmak.

Yukarıdaki kod aşağıdaki bağımlılıklar vardır:

Geçerli sürümünü LinqJS kullanılan yukarıdaki kodunda ByHierarchy yöntemi içermiyor ve gezinti kodu koparır. Bu hatayı düzeltmek için aşağıdaki yöntemi Linq.js dosyasına önce satır eklemeyi "Flatten: işlevi ()".

ByHierarchy: function(firstLevel, connectBy, orderBy, ascending, parent) {
     ascending = ascending == undefined ? true : ascending;
     var orderMethod = ascending == true ? 'OrderBy' : 'OrderByDescending';
     var source = this;
     firstLevel = Utils.CreateLambda(firstLevel);
     connectBy = Utils.CreateLambda(connectBy);
     orderBy = Utils.CreateLambda(orderBy);
    
     //Initiate or increase level
     var level = parent === undefined ? 1 : parent.level + 1;

    return new Enumerable(function() {
         var enumerator;
         var index = 0;

        var createLevel = function() {
                 var obj = {
                     item: enumerator.Current(),
                     level : level
                 };
                 obj.children = Enumerable.From(source).ByHierarchy(firstLevel, connectBy, orderBy, ascending, obj);
                 if (orderBy !== undefined) {
                     obj.children = obj.children[orderMethod](function(d) {
                         return orderBy(d.item); //unwrap the actual item for sort to work
                     });
                 }
                 obj.children = obj.children.ToArray();
                 Enumerable.From(obj.children).ForEach(function(child) {
                     child.getParent = function() {
                         return obj;
                     };
                 });
                 return obj;
             };

        return new IEnumerator(

        function() {
             enumerator = source.GetEnumerator();
         }, function() {
             while (enumerator.MoveNext()) {
                 var returnArr;
                 if (!parent) {
                     if (firstLevel(enumerator.Current(), index++)) {
                         return this.Yield(createLevel());
                     }

                } else {
                     if (connectBy(parent.item, enumerator.Current(), index++)) {
                         return this.Yield(createLevel());
                     }
                 }
             }
             return false;
         }, function() {
             Utils.Dispose(enumerator);
         })
     });
 },
Office yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Office Insider Programına Katılın

Bu bilgi yararlı oldu mu?

Görüşleriniz için teşekkür ederiz!

Geri bildiriminiz için teşekkürler! Office destek temsilcilerimizden biriyle görüşmeniz yararlı olabilir.

×