Ember.js &引用;无法调用方法';摧毁';“未定义”的定义;一成不变

Ember.js &引用;无法调用方法';摧毁';“未定义”的定义;一成不变,ember.js,Ember.js,我有一个我认为非常标准的数组/模板关系设置,但是当我将一个新项推入数组时,我得到了上面提到的无法调用方法'destroy'的undefined错误,该方法位于Ember source的arrayWillChange方法中: for (idx = start + removedCount - 1; idx >= start; idx--) { childView = childViews[idx]; if (removingAll) { childView.removedFromDO

我有一个我认为非常标准的数组/模板关系设置,但是当我将一个新项推入数组时,我得到了上面提到的
无法调用方法'destroy'的undefined
错误,该方法位于Ember source的
arrayWillChange
方法中:

for (idx = start + removedCount - 1; idx >= start; idx--) {
  childView = childViews[idx];
  if (removingAll) { childView.removedFromDOM = true; }
  childView.destroy(); <-- childView is undefined
}
for(idx=start+removedCount-1;idx>=start;idx--){
childView=childView[idx];
if(removingAll){childView.removedFromDOM=true;}
childView.destroy();编辑

您正在调用
array.push
而不是
array.pushObject
——后者是一个支持绑定的Ember.js方法,这意味着它将自动为您更新绑定。Handlebar模板帮助程序
{{{each filters}
是与控制器的筛选器数组的绑定,模板需要知道何时更新基础数组。
push
不会告诉绑定要更新,但
pushObject
会告诉绑定要更新

下面是一个工作示例(我所做的只是将push更改为pushObject):

这是一个非常常见的错误——通常,我发现如果我的模板与底层对象不同步,那是因为绑定出了问题,所以我从这里开始寻找

结束编辑

  • 我认为您不应该直接设置
    removedFromDOM
    ——尝试使用
    childView.remove()
    ,然后使用
    destroy()
  • 我不确定上下文是什么,但您是否查看过或?这两个视图都支持子视图数组,并且可能会以更少的代码更可靠地完成您希望完成的任务

  • 抱歉,我没有指定原始问题中的代码来自Ember源代码。我没有直接调用
    removedFromDOM
    。引发的错误来自Ember源代码。因为我所做的非常简单,我无法理解Ember为什么不喜欢它。我将更新我的问题以使其更清楚。我更新了我的答案--你'我们使用了
    push
    而不是
    pushObject
    。你能看看使用pushObject是否有效吗?这就解决了问题。我不知道这是一种特定于余烬的方法。我以为这是用于推送JS对象的,因为我推送字符串,所以我认为我不需要它。很高兴知道,谢谢。