Я получаю эту ошибку и не знаю, как решить этоUncaught RangeError: превышен максимальный размер стека вызовов. jstree
Uncaught RangeError: Maximum call stack size exceeded
Я пытаюсь построить дерево с использованием jstree Lib. Данные поступают из двух разных 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 возвращает массив, потому что теперь все хорошо. Затем я использую функцию нагрузки, чтобы объединить два массива в один массив супер
$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
}]
следует из логики jstree документы, мое дерево должно выглядеть
* Folder (root)
---- * Child Folder (parent)
---- * Filter 1 (Child)
---- * Filter 4 (Child)
, но вместо этого я получаю ошибку, что-то слишком много итераций. Может ли кто-нибудь помочь мне найти мою ошибку? Заранее спасибо. Plunker прилагается
oh У меня возникла эта проблема, спасибо за объяснение ... но если я ее изменю, она разрушит структуру БД. Например, у меня есть фильтр с идентификатором 5, также у меня есть папка с идентификатором 5, я изменил идентификатор фильтра, например, на 6, затем я хочу удалить этот фильтр. Я отправляю запрос API для удаления этого фильтра. НО API видит, что идентификатор фильтра равен 6 и удаляет неправильный фильтр, как быть с этим? – antonyboom
Я не совсем уверен, что я следую, но похоже, что это другая проблема с API или вашим источником данных. Для jsTree, если вы определяете родительский атрибут на каждом узле, он должен иметь уникальные идентификаторы для каждого элемента, и нужно избегать циклических ссылок для отношений родитель-потомок. – Adam
Помогло бы оно указать атрибуты для каждого элемента, который будет использоваться для ваших фильтров? Проверьте «li_attr» и «a_attr» на [исходные данные JSON] (https://www.jstree.com/docs/json/) – Adam