Превышен максимальный размер стека вызовов при привязке результатов Breeze к диаграммам пользовательского интерфейса Kendo
Я работаю над модифицированной версией шаблона Hot Towel для создания Angular SPA. Я использую Breeze для доступа к своим службам данных с помощью интерфейса кендо и данных, а именно для виджетов и диаграмм.
Я сталкиваюсь с проблемой, аналогичной той, которая описана в этой публикации SO Chrome//kendoUI/jQuery: превышен максимальный размер стека вызовов. При привязывании выходных данных моего сервиса breeze непосредственно к моей диаграмме я получаю ошибку " Превышен максимальный размер стека вызовов" на клиенте с " Uncaught Error: [$rootScope:infdig] 10 $digest() достигнут итераций. Отмена! Наблюдатели сработали за последние 5 итераций: [] '
Результаты Breeze имеют циклические ссылки, как указывает ссылка выше. Я не получаю никаких проблем при привязке этого к нормальным переменным угловых областей, но ошибка возникает только при привязке этого к моим диаграммам. Фильтрация данных на клиенте, как предполагает ссылка, вероятно, повлияет на производительность. Я попробовал несколько функций-заменителей и JSON.prune, но они также удаляют данные, которые мне нужны для отображения на диаграммах:(
Есть ли другое решение для этого?
Полная ошибка вставлена ниже. Похоже, что глубокое копирование выполняется для каждого свойства, но, поскольку существуют циклические ссылки, в результате возникает ошибка переполнения
RangeError: Maximum call stack size exceeded
at Object.toString (native)
at isArray (http://localhost:61438/Scripts/angular.js:596:19)
at isArrayLike (http://localhost:61438/Scripts/angular.js:278:27)
at forEach (http://localhost:61438/Scripts/angular.js:324:16)
at copy (http://localhost:61438/Scripts/angular.js:871:7)
at copy (http://localhost:61438/Scripts/angular.js:858:23)
at copy (http://localhost:61438/Scripts/angular.js:875:28)
at copy (http://localhost:61438/Scripts/angular.js:858:23)
at copy (http://localhost:61438/Scripts/angular.js:875:28)
at copy (http://localhost:61438/Scripts/angular.js:858:23) angular.js:9778
(anonymous function) angular.js:9778
(anonymous function) angular.js:7216
Scope.$digest angular.js:12270
(anonymous function) angular.js:12450
completeOutstandingRequest angular.js:4300
(anonymous function)
Uncaught Error: [$rootScope:infdig] 10 $digest() iterations reached. Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.2.16/$rootScope/infdig?p0=10&p1=%5B%5D angular.js:78
(anonymous function) angular.js:78
Scope.$digest angular.js:12290
(anonymous function) angular.js:12450
completeOutstandingRequest angular.js:4300
(anonymous function)
1 ответ
Это происходит потому, что сущности Breeze имеют ссылки друг на друга, и большинство сеток поставщиков не прекращают перебирать свойства при связывании. Для решения этой проблемы используется проекция, как описано здесь -
http://www.breezejs.com/documentation/knockout-circular-references