Chrome // kendoUI/jQuery:超出最大调用堆栈大小

Rol*_*ndo 4 jquery kendo-ui breeze durandal hottowel

我正在使用hottowell模板创建spa应用程序,我从jquery得到一个很好的错误.基本上我的问题现在开始尝试从viewModelBinder.js(来自durandal库)绑定我的视图.

viewModelBinder.beforeBind(obj, view);
action();
viewModelBinder.afterBind(obj, view);
Run Code Online (Sandbox Code Playgroud)

此时调用beforeBind此代码已执行(我自己的应用程序的main.js)

kendo.ns = "kendo-";
viewModelBinder.beforeBind = function (obj, view) {
    kendo.bind(view, obj.viewModel || obj);
};
Run Code Online (Sandbox Code Playgroud)

其中kendo.bind就像(来自kendo ui库的kendo.web.js):

function bind(dom, object) {
    var idx, length, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));
    object = kendo.observable(object);
    dom = $(dom);
    for (idx = 0, length = dom.length; idx < length; idx++) {
        bindElement(dom[idx], object, roles);
    }
}
Run Code Online (Sandbox Code Playgroud)

从这里开始我的线路

        object = kendo.observable(object); // where object it's my viewmodel as far i see in the debuger.
Run Code Online (Sandbox Code Playgroud)

我从文件jquery-1.9.1.js的第4224行得到了很多例外

div.querySelectorAll("*,:x");
Run Code Online (Sandbox Code Playgroud)

和文件jquery-1.9.1.js的第4242行

matches.call( div, "[s!='']:x" );
Run Code Online (Sandbox Code Playgroud)

这些异常导致控制台中出现错误:"超出最大调用堆栈大小"

我的怀疑是我的html视图,也许是一些html元素它触发了这个问题.其他有趣的评论是当html视图中的元素从visible:false变为visible:true时出现问题(我的视图是一个html表,它能够显示或隐藏所选行的详细信息)

War*_*ard 5

你想绑定什么数据对象?将Kendo UI组件绑定到具有循环引用的数据对象(例如,customer - > orders [0] - > customer)时,通常会发生"调用堆栈超出"错误.所有breeze实体都有循环引用(例如,customer.entityAspect.entity指向客户).

因此,您需要训练组件以忽略某些路径或插入剪切这些路径的中间对象.如果您只是呈现(不更新)对象,则可以使用JSON.stringify制作安全副本,传入replacer函数以排除循环路径.

这是一个比我在这个答案中有时间的话题.Kendo UI并不是唯一一个有这个问题的人,我赶紧补充一下.