将Breeze结果绑定到Kendo UI图表时超出最大调用堆栈大小

时间:2014-07-11 20:48:13

标签: angularjs kendo-ui breeze kendo-dataviz angular-kendo

我正在研究Hot Towel模板的修改版本以创建Angular SPA。我使用Breeze访问我的数据服务与kendo UI和数据viz的小部件和图表。

我正面临与此SO帖Chrome//kendoUI/jQuery: Maximum call stack size exceeded中所述的类似问题。在将我的breeze服务输出直接绑定到我的图表时,我在客户端遇到未捕获错误最大调用堆栈大小错误:[$ 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 个答案:

答案 0 :(得分:3)

这是因为Breeze实体彼此引用,并且大多数供应商网格在绑定时停止迭代属性。解决此问题的方法是使用此处所述的投影 -

http://www.breezejs.com/documentation/knockout-circular-references