jquery - Chrome//kendoUI/jQuery : Maximum call stack size exceeded

标签 jquery kendo-ui breeze durandal hottowel

我正在使用 hottowell 模板来创建 spa 应用程序,并且我从 jquery 中收到了一个很好的错误。基本上我的问题从此刻开始尝试绑定(bind)我的 View viewModelBinder.js(来自 durandal 库)。

viewModelBinder.beforeBind(obj, view);
action();
viewModelBinder.afterBind(obj, view);

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

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

其中 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);
    }
}

当我运行生产线时从这里

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

我从文件 jquery-1.9.1.js 的第 4224 行收到很多异常

div.querySelectorAll("*,:x");

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

matches.call( div, "[s!='']:x" );

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

我怀疑是我的 html View ,也许某些 html 元素触发了这个问题。其他有趣的评论是,当 html View 内的元素从visible :false 更改为visible:true 时,就会出现问题(我认为它是一个 html 表格,能够显示或隐藏所选行的详细信息)

最佳答案

您要绑定(bind)什么数据对象?将 Kendo UI 组件绑定(bind)到具有循环引用的数据对象(例如,客户 -> 订单[0] -> 客户)时,经常会发生“超出调用堆栈”错误。所有 Breeze 实体都有循环引用(例如,指向客户的 customer.entityAspect.entity)。

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

这是一个更大的话题,我没有时间在这个答案中讨论。 Kendo UI 并不是唯一有这个问题的,我赶紧补充一下。

关于jquery - Chrome//kendoUI/jQuery : Maximum call stack size exceeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17960926/

相关文章:

javascript - 在剑道自动完成中获取选定的对象

javascript - Durandal : Widget's activate callback not behaving like a regular viewmodel's callback

asp.net-web-api - 最大扩展深度,带有最新的Web API和 Breeze

javascript - 屏幕显示页面底部时如何在屏幕中间显示固定的div

jquery - 如何在 Bootstrap 数据表插件上对日期格式 d/m/y 进行排序?

javascript - Kendo 数据源 shema.data 不适用于下拉列表

javascript - Kendo - 更改数据源 onclick

javascript - Breeze JS : Is there a way to query entities from data. 结果?

javascript - 在 asp.net 中自动调整面板中子控件的大小

javascript - 如何在 Rails 3.1.4 中使用 FormBuilder.new 构建表单生成器对象