2012-01-30 97 views
1

我有一個sencha觸摸的奇怪問題。 更改屏幕上卡住的選擇區域中的值。我有一個應用程序,其中有選擇字段,並在更改選擇字段值時,我正在應用一些規則。規則是刪除所有屏幕元素並新添加它。屏幕卡在sencha觸摸選擇字段更改監聽器

下面是代碼快照。

現在,它與鉻,safari瀏覽器和iPad設備瀏覽器工作得很好。但是現在它給iPhone和Android設備帶來了奇怪的問題。屏幕卡住了。更改選擇字段中的值後,不允許發生任何事件。

採取的步驟;另外,我在源代碼的每一步都將警報作爲記錄器來確保無限循環。我還將異常處理程序確保發生錯誤。沒有錯誤,既不會造成內存/運行時問題,也不會出現無限循環運行。

App.views.MySampleScreen = Ext.extend(Ext.Panel, { 
     initComponent : function() { 
      var titlebar = { 
       dock : 'top', 
       xtype : 'toolbar', 
       cls: 'x-panel-title', 
       title : "Home Screen"  
      }; 

      var buttonbar = { 
       xtype : 'toolbar', 
       dock : 'bottom', 
       cls: 'x-panel-footer', 
       items : [ 
        {xtype : "spacer"}     
       ] 
      }; 


      var myFieldSet = new Ext.form.FieldSet({ 
       xtype: 'fieldset', 
       id : 'myFieldSet', 
       name: 'myFieldSet' 

      }); 

      var formBase = new Ext.form.FormPanel({ 
       ui: 'round', 
       id: 'standardFormBase', 
       items: [myFieldSet], 
      }); 

      Ext.apply(this, { 
       scroll: 'vertical', 
       pinHeaders: true, 
       dockedItems : [titlebar, buttonbar], 
       items : [formBase], 

       listeners: { 
        beforeactivate: function(panel) { 
         createAndInitScreen(); 
        } 
        } 
      }); 

      App.views.MySampleScreen.superclass.initComponent.call(this); 
     } 

    }); 

    Ext.reg('App.views.MySampleScreen', App.views.MySampleScreen); 

    function createAndInitScreen(){ 

     var myFieldSet = Ext.getCmp("myFieldSet"); 
     myFieldSet.removeAll(true); 

     var stateList2 = new Ext.form.Select({ 
      label: 'State', 
      name: 'state', 
      id: 'stateLis2t', 
      widht: '100%', 
      autoLoad: true, 
      labelWidth: '40%', 
      options: [{ 
          text: 'Test', value: 'Test' 
         }, { 
          text: 'Test2', value: 'Test2' 
         }, { 
          text: 'Test3', value: 'Test3' 
         }], 
      listeners: { 
       afterrender: function(ele) { 

       }, 
       change: function(field, value) { 
        createAndInitScreen(); // Here is the problem 
         // if i remove this then this works, but my need 
         //is to call CreateAndInitScreen after value change in select() 
       }    
      } 
     }); 

     myFieldSet.items.add(stateList2); 

     myFieldSet.show(); 
     myFieldSet.doLayout();  
} 
+0

嘗試刪除stateList2的id屬性。您正在創建更多具有相同ID的'Ext.form.Select'對象。這可能會導致奇怪的問題... – ilija139 2012-02-01 10:23:37

+0

@ ilija139我已經從Ext.form.Select中刪除了Id屬性。但問題仍然存在。 – 2012-02-01 10:43:27

+0

然後我不知道。你應該改變整個代碼。如果你想改變'form.Select'中的項目,那麼你需要刪除項目並添加新的項目,而不是刪除整個對象,然後創建一個新項目。代碼結構不好,你可能會耗盡內存或類似的東西,或者一些不定式的循環(事件或遞歸)。 – ilija139 2012-02-01 10:48:24

回答

0

我已經解決了這個問題。我不是每次創建控件,而是從屏幕元素中刪除和添加數據。 Thant適合我的要求。無論如何謝謝大家的支持。

0

我可能發現了這個錯誤。

selectfield無法計算出iPhone屏幕的高度。

在iPad上計算高度,以便selectfield picker顯示屏幕的其餘部分被屏蔽,直到您解除選取器爲止。

在iPhone上,選取器實際上是在屏幕上創建和繪製的,因爲屏幕被假定爲更大,所以它不可見。即拾取器在屏幕上較低(在不可見部分),感覺屏幕卡住/停頓,因爲仍然出現掩蓋

如果您減少相關面板的高度(考慮到iPhone屏幕高度),你應該擁有的一切完美的工作。

希望這可以幫助別人。上帝知道我花足夠的時間找到它!:)