gpt4 book ai didi

ember.js - "Cannot call method ' 销毁 arrayWillChange 中的 ' of undefined"

转载 作者:行者123 更新时间:2023-12-01 10:53:37 26 4
gpt4 key购买 nike

我有一个我认为非常标准的数组/模板关系设置,但是当我将一个新项目插入数组时,我得到上面提到的 Cannot call method 'destroy' of undefined 错误Ember 源代码的 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

最佳答案

编辑:

您调用的是 array.push 而不是 array.pushObject —— 后者是一个绑定(bind)感知的 Ember.js 方法,这意味着它会自动更新绑定(bind)给你。 handlebars 模板助手 {{#each filters}} 绑定(bind)到 Controller 的 filters 数组,当底层数组更新时,模板需要知道更新。 push 不会告诉绑定(bind)更新,但 pushObject 会。

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

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

结束编辑

  1. 我认为您不应该直接设置 removedFromDOM - 尝试使用 childView.remove(),然后使用 destroy()
  2. 我不确定上下文是什么,但你看过ContainerView了吗?或 CollectionView ?这两种 View 都支持 subview 数组,并且可以更稳健地完成您希望做的事情,并且代码更少。

关于ember.js - "Cannot call method ' 销毁 arrayWillChange 中的 ' of undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com