2013-02-01 53 views
1

我已經在我的應用程序一對夫婦點遇到這樣的:重新創建活動項目不會被添加到任意容器

假設我有一個轉盤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。不知道爲什麼是這種情況。仍然不是一個真正的解決方案,這是一個破解。

回答

0

假設您的代碼片段中沒有問題來重新填充輪播中的新項目,那麼唯一的問題是由於這個問題(我不確定它是否是Sencha Touch 2.1中的錯誤,但它不是確實存在):當您撥打yourCarousel.removeAll()並再次添加一些新項目時,您的傳送帶不會設置正確的活動項目。

我已經看到了類似的問題,我說這個增加新的項目後,其工作原理:

carousel.setActiveItem(0);

+0

不幸的是,它看起來不像是解決了問題; (即使在removeAll()之前曾經是活動項目的對象)也不會插入到DOM中,即使它被插入到對象中(如由Ext.getCmp('carousel_name')所證明的)getItems( )當你到達旋轉木馬的位置時,它只是一個空白的項目,而當你檢查元素時,它只是一個空的div。我不認爲問題是重新創建新項目的代碼片斷,因爲它與第一次創建項目的代碼相同,並且在第一次創建時沒有問題。 –

0

好吧,這是一個黑客,因此,如果任何人有一個合法的解決方案,這將是真棒。但黑客沒有工作,所以在這裏它是:

  • 在轉盤
  • 設置活動項目添加一個空的項目到新的空旋轉木馬項目
  • 銷燬所有的旋轉木馬項目
  • 重新創建(和再-add)的所有項目

在代碼:

Ext.getCmp('carousel_name').add({}); 
Ext.getCmp('carousel_name').setActiveItem(Ext.getCmp('carousel_name').getMaxItemIndex()); 
Ext.getCmp('carousel_name').removeAll(true); 
var new_objects = (bunch of code that recreates the carousel's objects again, with the same IDs) 
Ext.getCmp('carousel_name').add(new_objects); 

編輯:事實證明,這是由於某種原因工作90%的時間;由於某些未知的原因,10%的時間仍未插入。確保所有項目正確插入的唯一方法是清除整個視口(Ext.Viewport.removeAll(true)),重新創建視口中的所有原始項目,然後重新插入它們。每當物品沒有插入時,我寧願不必這樣做。

相關問題