我正在使用hottowell模板创建spa应用程序,我从jquery得到一个很好的错误。基本上我的问题现在开始尝试绑定我的视图 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视图,也许是一些html元素引发了这个问题。其他有趣的评论是当html视图中的元素从visible:false变为visible:true时出现问题(我的视图是一个html表,它能够显示或隐藏所选行的详细信息)
答案 0 :(得分:5)
您想要绑定哪个数据对象?将Kendo UI组件绑定到具有循环引用的数据对象(例如,customer - &gt; orders [0] - &gt; customer)时,通常会发生“调用堆栈超出”错误。所有breeze实体都有循环引用(例如,customer.entityAspect.entity指向客户)。
因此,您需要训练组件以忽略某些路径或插入剪切这些路径的中间对象。如果您只是呈现(不更新)对象,您可以使用JSON.stringify制作一个安全副本,传入一个替换器函数来排除循环路径。
这是一个比我在这个答案中有时间的话题。 Kendo UI并不是唯一一个有这个问题的人,我赶紧补充一下。