我已經在我的應用程序一對夫婦點遇到這樣的:重新創建活動項目不會被添加到任意容器
假設我有一個轉盤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);
當我嘗試在項目手動添加到任何視口或轉盤,沒有什麼是固定的。
我試過插入一個虛擬物品之間刪除和重新插入的新項目,這是行不通的。在做任何這些之前隱藏整個視口並在之後顯示它。也不使用setItems()
而不是add()
。也沒有做Ext.getCmp('exercises_carousel').each(function(item){ item.destroy(); })
而不是removeAll(true)
我不認爲問題是重新創建新項目的代碼片段,因爲它是用於第一次創建項目的相同的代碼,並且沒有問題在第一次創作。
這裏很難過。
編輯:我發現,如果當我到達旋轉木馬的盡頭時,如果我在旋轉木馬中的最後一項之後添加空項目,我沒有在N- 2。不知道爲什麼是這種情況。仍然不是一個真正的解決方案,這是一個破解。
不幸的是,它看起來不像是解決了問題; (即使在removeAll()之前曾經是活動項目的對象)也不會插入到DOM中,即使它被插入到對象中(如由Ext.getCmp('carousel_name')所證明的)getItems( )當你到達旋轉木馬的位置時,它只是一個空白的項目,而當你檢查元素時,它只是一個空的div。我不認爲問題是重新創建新項目的代碼片斷,因爲它與第一次創建項目的代碼相同,並且在第一次創建時沒有問題。 –