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表,它能够显示或隐藏所选行的详细信息)
你想绑定什么数据对象?将Kendo UI组件绑定到具有循环引用的数据对象(例如,customer - > orders [0] - > customer)时,通常会发生"调用堆栈超出"错误.所有breeze实体都有循环引用(例如,customer.entityAspect.entity指向客户).
因此,您需要训练组件以忽略某些路径或插入剪切这些路径的中间对象.如果您只是呈现(不更新)对象,则可以使用JSON.stringify制作安全副本,传入replacer函数以排除循环路径.
这是一个比我在这个答案中有时间的话题.Kendo UI并不是唯一一个有这个问题的人,我赶紧补充一下.