javascript - 未捕获的 RangeError : Maximum call stack size exceeded. jstree

标签 javascript arrays angularjs jstree

我收到这个错误,但不知道如何解决

Uncaught RangeError: Maximum call stack size exceeded

我正在尝试使用 jstree 库构建树。数据来自两个不同的 http 调用。 我得到这样的初始数据:

           $scope.treeFolders = [];
        $scope.treeFilters = [];
        $scope.tree = [];
    var folders = function () {
        $http.get("folders.json")
        .success(function (res) {
                    angular.forEach(res, function(parent){
                      // console.log(parent)
                        if(!("parent" in parent)){
                          parent.parent = "#"
                        }
                    })

                     $scope.treeFolders = res
                     console.log($scope.treeFolders)
                });
        };
        folders();

    var filters = function(){
            $http.get("child.json")
               .success(function (res) {
                    angular.forEach(res, function(obj){
                        if(!("parent" in obj)){
                          // console.log(obj.folderId)
                            obj.parent = obj.folderId;
                        }
                        // console.log(obj)
                    });

                    $scope.treeFilters = res;
                    console.log($scope.treeFilters)

                });
    };
  filters();

console.log 返回数组,目前一切正常。然后我使用函数加载将两个数组合并为一个 super 数组

    $scope.load = function(){
    // method 1
            $scope.tree = $scope.treeFolders.concat($scope.treeFilters);
          console.log(JSON.stringify($scope.tree))
    // method 2      
        // $scope.treeFolders.forEach(function(item){
        // $scope.tree.push(item)
        // })
        // $scope.treeFilters.forEach(function(item){
        // $scope.tree.push(item)
        // })
        // console.log(JSON.stringify($scope.tree))
        }

如您所见,我尝试通过两种方法获得一个数组,两种方法都有效,我得到了这个数组

  [{
"id":1,
"userId":1,
"createdDt":"2016-06-27T13:05:03.000+0000",
"text":"folder",
"parent":"#"
  },{
"id":2,
"parent":1,
"userId":1,
"createdDt":"2016-06-27T13:26:45.000+0000",
"text":"child folder"
  },{
"id":2,
"folderId":2,
"folder":{"id":2,"text":"child folder"},
"body":"empty",
"user":{"id":1,"name":"User 1"},
"userId":1,
"createdDt":"2016-06-27T13:05:47.000+0000",
"text":"filter 1",
"parent":2
  },{
"id":3,
"folderId":2,
"folder":{"id":2,"text":"child folder"},
"body":"nothing",
"user":{"id":1,"name":"User 1"},
"userId":1,"createdDt":"2016-06-27T13:00:00.000+0000",
"text":"filter 4",
"parent":2
  }]

按照 logic jstree 文档,我的树应该是这样的

* Folder (root) 
---- * Child Folder (parent)
     ---- * Filter 1 (Child)
     ---- * Filter 4 (Child)

但我得到的不是这个,而是某个地方迭代太多的错误。有人可以帮我找到我的错误吗?先感谢您。 Plunker附上

最佳答案

您的数组包含两个带有“id”:2 的项,其中一个的父项也定义为“id”:2。这可能会创建一个循环引用。

尝试将您的第一个子项的 ID 更改为 4,我在您的 plunker 链接上这样做了,树加载的方式就像您正在寻找的那样。

关于javascript - 未捕获的 RangeError : Maximum call stack size exceeded. jstree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38210409/

相关文章:

javascript - 通过 jquery 更改除当前选择之外的所有选择数组名称值

ios - 'didSet' 数组中的某些元素 - Swift

html - 如何为两列保持单个 div 和相同的高度

javascript - ClickAwayListener 不适用于折叠或淡入淡出过渡

javascript - 如何将内插字符串/动态属性传递到 Javascript 哈希?

javascript - 传入函数数组作为参数,对于函数中的每个函数运行该函数

c - 原地转置矩阵的函数

c - 我正在尝试创建一个程序,该程序接受名称并输出缩写,但不断遇到数组错误

javascript - AngularJS - 在私有(private)函数中使用 'this'

html - 在范围销毁上销毁指令/子范围