2012-01-30 6 views
1

У меня странная проблема с сенсорным сенча. Изменение значения в поле выбора застряло на экране. У меня есть приложение, в котором есть поля «Выбрать», а при изменении значения поля выбора я применяю некоторые правила. Правило состоит в том, чтобы удалить все элементы экрана и добавить его снова.Экран застрял в sencha touch select change changeener

Ниже приводится моментальный снимок кода.

Он работает абсолютно нормально с браузером хрома, сафари и браузером устройства iPad. Но теперь это дает странную проблему в iPhone и устройстве Android. Экран застрял. После изменения значения в поле выбора события не допускаются.

Шаги взяты; Кроме того, я поставил предупреждение как регистратор на каждом этапе исходного кода, чтобы обеспечить бесконечный цикл. Я также поставил обработчики исключений, чтобы убедиться, что произошла ошибка. Никаких ошибок, ни ant бесконечного цикла, которые могут вызвать проблемы с памятью/временем выполнения.

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. Вы создаете больше одного объекта «Ext.form.Select» с тем же идентификатором. Это может вызвать странные проблемы ... – ilija139

+0

@ ilija139 Я удалил свойство Id из Ext.form.Select. Но проблема все же существует. –

+0

Тогда я не знаю. Вы должны изменить весь код. Если вы хотите изменить элементы в форме .Select, вам нужно удалить элементы и добавить новые, а не удалить весь объект, а затем создать новый. Код плохо структурирован, и вы, вероятно, исчерпали память или что-то подобное, или некоторый инфинитивный цикл (событие или рекурсивный). – ilija139

ответ

0

Я исправил проблему при работе. Вместо того, чтобы создавать элемент управления для каждого раза, я удаляю и добавляю данные из элементов экрана. Тант отлично подходит для моих требований. В любом случае, спасибо вам за вашу поддержку.

0

Возможно, я нашел ошибку.

Поле выбора не может определить высоту экрана на iPhone.

На iPad высота подсчитывается так, что выбирается selectfield picker, а остальная часть экрана маскируется до тех пор, пока вы не отпустите сборщик.

На iPhone сборщик на самом деле создан и окрашен в экран, его просто не видно, так как экран считается намного большим. т.е. Picker находится ниже на экране (в невидимой части. Он чувствует, что экран застрял/заглох, потому что маскирование все еще происходит.

Если вы уменьшаете высоту соответствующей панели (с учетом экрана iPhone высота), вы должны иметь все прекрасно работают.

Надеется, что это помогает кто-то. Бог знает, что я провожу достаточно времени на поиск его! :)

Смежные вопросы