Превышен максимальный размер стека вызовов при привязке результатов 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

Другие вопросы по тегам