我有一个非常标准的数组/模板关系设置,但是当我将一个新项目推入数组时,我得到了上面提到的内容Cannot call method 'destroy' of undefined
错误在arrayWillChange
Ember源码的方法:
for (idx = start + removedCount - 1; idx >= start; idx--) {
childView = childViews[idx];
if (removingAll) { childView.removedFromDOM = true; }
childView.destroy(); <-- childView is undefined
}
我以前从未遇到过这个问题。当我从数组中删除一个项目时,不会发生这种情况。只能靠加法。下面是 JSBin 的链接,我尝试在其中复制该问题。不会引发错误,但模板也不会更新。
http://jsbin.com/asemul/2 http://jsbin.com/asemul/2
EDIT:
你正在呼唤array.push
代替array.pushObject
-- 后者是一个具有绑定意识的 Ember.js 方法,这意味着它将自动为您更新绑定。车把模板助手{{#each filters}}
是到控制器的过滤器数组的绑定,并且模板需要知道当底层数组更新时进行更新。push
不告诉绑定更新,但是pushObject
does.
这是一个工作示例(我所做的只是将 Push 更改为 PushObject):http://jsbin.com/asemul/6/ http://jsbin.com/asemul/6/
这是一个非常常见的错误 - 通常,我发现如果我的模板与底层对象不同步,那是因为绑定出了问题,所以这就是我开始寻找的地方。
END EDIT
- 我认为你不应该设置
removedFromDOM
直接--尝试使用childView.remove()
其次是destroy()
.
- 我不确定上下文是什么,但你看过吗ContainerView http://emberjs.com/api/classes/Ember.ContainerView.html or CollectionView http://emberjs.com/api/classes/Ember.CollectionView.html?这两个视图都支持子视图数组,并且可以用更少的代码更强大地完成您想要做的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)