アプリのいくつかの場所でこれに遭遇しました。
カルーセルに 3 つのアイテムがあるとします。アイテム #2 を表示しています。そのカルーセルをリロードする必要があるため、次の操作を行います。
Ext.getCmp('carousel_name').removeAll();
var new_objects = (bunch of code that recreates the carousel's objects again, with the same IDs; this is the same code that was used to create the objects the first time, so it is likely not the issue)
Ext.getCmp('carousel_name').add(new_objects);
カルーセル オブジェクト アイテム リスト ( Ext.getCmp('carousel_name').getItems()
) には、3 つのアイテムがすべて存在します。ただし、実際に表示されるのは #1 と #3 (カルーセルのリロード前にアクティブなアイテムではなかったもの) のみです。#2は空白の画面を表示し、HTMLにはアイテムシェルマークアップ以外は何も存在しません(私が書いたコードは表示されません). するとExt.getCmp('carousel_item_2').show();
、アイテムは表示されますが全画面表示になり、次のエラーが表示されます。
[DEPRECATE][Ext.Panel#show] Call show() on a component that doesn't currently belong to any container. Please add it to the the Viewport first, i.e: Ext.Viewport.add(component);
そのアイテムをビューポートまたはカルーセルに手動で追加しようとしても、何も修正されません。
新しいアイテムの削除と再挿入の間にダミー アイテムを挿入しようとしましたが、うまくいきません。これを実行する前にビューポート全体を非表示にして、後で表示することもありません。setItems()
の代わりに使用することもありませんadd()
。Ext.getCmp('exercises_carousel').each(function(item){ item.destroy(); })
することもしないremoveAll(true)
初めてアイテムを作成するために使用されるコードと同じコードであり、最初の作成には問題がないため、問題は新しいアイテムを再作成するコード スニペットではないと思います。
ここでかなり困惑しました。
編集:カルーセルの最後に到達したときに、カルーセルの最後のアイテムの後に空のアイテムを追加すると、N-2 で空白のアイテムが取得されないことがわかりました。なぜそうなのかはわかりません。まだ本当の解決策ではありません。これはハックです。