繁体   English   中英

错误:集合尚未初始化

[英]ERROR: The collection has not been initialized

我正在使用以下代码查询托管元数据的内容。 我遇到错误

集合尚未初始化

当我在var level2TermsEnum = level2Terms.getEnumerator();

我已经读到这是由于JavaScript的延迟和承诺,我似乎无法理解。 也许您可以帮助我了解一下。

    $(document).ready(function () {

        var scriptbase = _spPageContextInfo.webServerRelativeUrl + "/_layouts/15/";

        $.getScript(scriptbase + "SP.Runtime.js",

        function () {

            $.getScript(scriptbase + "SP.js", function () {

                $.getScript(scriptbase + "SP.Taxonomy.js", function () {

                    context = SP.ClientContext.get_current();
                    var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);

                    //Term Stores
                    var termStores = taxSession.get_termStores();
                    //Term Store under which to create the group.
                    var termStore = termStores.getByName("Managed Metadata Service");
                    var termSet = termStore.getTermSet("7b6ee52v-3709-4181-a14d-b953f2ad0aad");
                    //Call your code here.

                    GetTermsFromTaxonomyStore();
                });

            });

        });

        var json = "";
        function GetTermsFromTaxonomyStore() {

            //Current Context
            var context = SP.ClientContext.get_current();
            //Current Taxonomy Session
            var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);
            var termStores = taxSession.get_termStores();
            //Term Store under which to create the term.
            //var termStore = taxSession.getDefaultSiteCollectionTermStore();
            var termStore = termStores.getByName("Managed Metadata Service");
            //Pass ID of the Meetings Term Set
            var termSet = termStore.getTermSet("7b6ee52v-3709-4181-a14d-b953f2ad0aad");
            var terms = termSet.get_terms();
            context.load(terms);
            context.executeQueryAsync(function () {
                var level1Terms = terms.getEnumerator();
                while (level1Terms.moveNext()) { //iterate thru Level1
                    var level1 = level1Terms.get_current();
                    if (level1.get_termsCount() > 0) { //check if Level1 has child
                        var level2Terms = level1.get_terms(); //get level2 terms of level 1 term
                        **var level2TermsEnum = level2Terms.getEnumerator();**
                        while (level2TermsEnum.moveNext())
                        {
                            var level2Term = level2TermsEnum.get_current();
                            var level2TermName = level2Term.get_name();
                            termsList += '"Level1":"' + level2Term.get_name() + '","Level2":"' + level2TermName + '"';
                        }

                    }
                    //console.log(currentTerm.get_name());
                }
                alert(termsList);

            }, function (sender, args) {
                console.log(args.get_message());
            });
        }

当客户端对象模型为您返回对象集合时,如果每个对象都有自己的子集合,则除非您明确要求加载它们,否则不会初始化它们。

此处提供的答案类似,您应该能够使用一个附加参数来更新对context.load()调用,告诉它要加载的内容。

我相信类似以下代码的代码将起作用,但我尚未对其进行测试:

context.load(terms,"Include(Name,Terms,Terms.Include(Name))"); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM