Javascript 剑道-两个可观察的物体可以使用;更改“;事件在同一页上?

Javascript 剑道-两个可观察的物体可以使用;更改“;事件在同一页上?,javascript,jquery,kendo-ui,jquery-events,kendo-mvvm,Javascript,Jquery,Kendo Ui,Jquery Events,Kendo Mvvm,我有一个页面,对两个不同的元素使用剑道MVVM方法,一个提供文件搜索结果,另一个提供文档上传功能 我遇到的问题与两个元素使用的更改事件有关-似乎当一个控件触发一个更改事件时,另一个控件会拾取该事件,然后该控件会尝试处理该事件并将其传递,此时,它被第二个控件的更改处理程序拾取,后者处理它并将其传递给第一个控件的更改处理程序。正如您所预料的,在这个周期大约1500次重复之后,我看到了一条未捕获范围错误:当JavaScript引擎内存不足时,超过了最大调用堆栈大小 起初,我认为问题在于第二个模型的容器

我有一个页面,对两个不同的元素使用剑道MVVM方法,一个提供文件搜索结果,另一个提供文档上传功能

我遇到的问题与两个元素使用的更改事件有关-似乎当一个控件触发一个更改事件时,另一个控件会拾取该事件,然后该控件会尝试处理该事件并将其传递,此时,它被第二个控件的更改处理程序拾取,后者处理它并将其传递给第一个控件的更改处理程序。正如您所预料的,在这个周期大约1500次重复之后,我看到了一条
未捕获范围错误:当JavaScript引擎内存不足时,超过了最大调用堆栈大小

起初,我认为问题在于第二个模型的容器包含在第一个模型中,但即使它们在页面上完全分开,问题似乎仍然存在,因此现在我想知道问题是否与页面的全局事件有关

似乎我在事件处理程序中所做的任何尝试
stopPropagation
stoppimmediatepropagation
——甚至将事件设置为null——都不会对这种行为产生影响。跟踪调用堆栈时,我可以看到它通过Kendo的
trigger
调用循环,然后通过我的对象上的事件绑定和jQuery的分派循环将其引导回Kendo,在那里它触发另一个可观察对象上的事件处理程序


删除绑定不会影响问题,更改事件仍然以相同的方式在Kendo和jQuery之间来回反弹,它只是没有贯穿我的代码。

这里的答案不是Kendo本身的直接结果,因此在我设置问题时很难从中回答

在引发此错误的可观察容器中,我使用了布局。我错过的一步是我有一段这样的关系:

 Parent [Observable] 
    -> Container 
        -> Child 
        -> Child
        -> Child
 Parent [Observable] 
    -> Container <--┐
        -> Child ---|
        -> Child ---|
        -> Child ---┘
同位素
为参与方带来的一件事是,对于子集合中的每个项目,它都会添加对其父对象的引用

当子对象是可观察的时,会创建如下结构:

 Parent [Observable] 
    -> Container 
        -> Child 
        -> Child
        -> Child
 Parent [Observable] 
    -> Container <--┐
        -> Child ---|
        -> Child ---|
        -> Child ---┘
Parent[可观察]
->容器子对象---|
->孩子---|
->孩子---┘
这是将事件从子级传播到父级的理想情况,但由于相关库自动添加了相关属性,因此很难排除故障

解决方案是从可观察模型中删除
容器
层-它不需要在更改时触发任何东西,因此我将其包装在一个简单的
getContainer()
闭包中,并将其用作以前将其用作属性的所有地方。这保护了它不受
可观察对象的影响,在不损害功能的情况下打破了循环引用

据我所知,起始事件是一个DOM
change
事件,而不是剑道自己的事件,这也可能是相关的。使用自定义剑道名称空间可能可以避免这个问题,但在复杂的应用程序中,这将是一个重大的变化,并保证会导致许多副作用