3

我有一个我认为是非常标准的数组/模板关系设置,但是当我将一个新项目推送到数组中时,我在 Ember 源的方法中得到了上述Cannot call method 'destroy' of undefined错误:arrayWillChange

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

4

1 回答 1

6

编辑

您正在调用array.push而不是array.pushObject-- 后者是一个 Ember.js 绑定感知方法,这意味着它将自动为您更新绑定。handlebars 模板帮助{{#each filters}}器是对控制器的过滤器数组的绑定,模板需要知道何时更新底层数组。push没有告诉绑定更新,但pushObject确实如此。

这是一个工作示例(我所做的只是将 push 更改为 pushObject):http: //jsbin.com/asemul/6/

这是一个很常见的错误——通常,我发现如果我的模板没有与底层对象同步,那是因为绑定有问题,所以我开始寻找。

结束编辑

  1. 我认为您不应该直接设置removedFromDOM-尝试使用childView.remove()后跟destroy().
  2. 我不确定上下文是什么,但你看过ContainerVieworCollectionView吗?这两个视图都支持子视图数组,并且可以用更少的代码更健壮地完成您想要做的事情。
于 2013-05-21T03:56:41.343 回答