我在我的应用程序的几个地方遇到了这个问题:
假设我在轮播中有 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()
) 中,所有三个项目都存在。但是,只有 #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);
当我尝试手动将该项目添加到视口或轮播时,没有任何问题是固定的。
我尝试在移除和重新插入新项目之间插入一个虚拟项目,但这不起作用。也不会在执行任何此操作之前隐藏整个视口并在之后显示它。usingsetItems()
而不是add()
. 做Ext.getCmp('exercises_carousel').each(function(item){ item.destroy(); })
而不是removeAll(true)
我认为问题不在于重新创建新项目的代码片段,因为它与第一次用于创建项目的代码相同,并且第一次创建没有问题。
在这里很困惑。
编辑:我发现,当我到达轮播结束时,如果我在轮播的最后一项之后添加一个空项目,我不会在 N-2 处获得空白项目。不知道为什么会这样。仍然不是一个真正的解决方案,它是一个黑客。