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. コンテキストが何であるかはわかりませんが、 または を見ましたContainerViewCollectionView?これらのビューはどちらも子ビューの配列をサポートしており、目的をより確実に、より少ないコードで実現できます。
于 2013-05-21T03:56:41.343 に答える