Sencha Touch: удаление элемента, обновление представления об изменении ориентации и т. Д. - PullRequest
0 голосов
/ 29 ноября 2011

спасибо за ответ, похоже, что мы можем что-то получить. Я создал новый взгляд, который прост и в простой форме. Смотрите ниже:

  var homePanelTop = new Ext.Panel({    id:'topCont',
      cls:'topCont'    
  });
  var homePanelBtm = new Ext.Panel({
      id:'btmCont',
      cls:'btmCont'
  });


  App.views.HomeIndex = Ext.extend(Ext.Panel, {
          id:'mainlayout',
          fullscreen : true,
          layout: {
                      type: 'vbox',
                      align: 'stretch',
              },
              defaults:{flex:1},
           items: [homePanelTop, homePanelBtm],
           suspendLayout: true,
              monitorOrientation: true,
              orientationchange: this.onOrientationChange,
              onOrientationChange: function(orientation, w, h){
                  this.suspendLayout = false;
                   if(orientation === 'portrait'){
                           console.log('P: ' + orientation);
                              this.add(homePanelTop, true);
                          } else {
                           console.log('L: ' + orientation);
                              this.remove(homePanelTop, false);
                      }
                      this.doLayout();
              }
  });
  Ext.reg('HomeIndex', App.views.HomeIndex);

То, что я ожидаю увидеть в приведенном выше виде, относится к первой загрузке и портрету, будет две панели: верхняя панель (желтая) и нижняя панель (синяя). Когда я вращаюсь как обычно, я все равно получаю тот же эффект.

Но после того, как я поворачиваюсь в горизонтальной плоскости, верхняя панель (желтая) удаляется, а нижняя панель (синяя) заполняет оставшееся пространство.

Затем, когда я поворачиваюсь назад к портрету, я получаю обе панели с их расчетными размерами (flex: 1)

Что происходит с использованием приведенного выше кода (тестирование в Chrome), так это то, что верхняя панель (желтая) остается сверху, но немного меньше по высоте и не исчезает так, как должна

В любом случае обратите внимание на две команды трассировки консоли, которые у меня есть, и они показывают следующие показания при вращении:

После первой загрузки я поворачиваюсь в альбомную ориентацию и получаю:

L: пейзаж

L: пейзаж

Попытка удалить компонент, который не существует. Ext.Container: remove принимает аргумент компонента для удаления. cmp.remove () - неверное использование.

L: пейзаж

Попытка удалить компонент, который не существует. Ext.Container: remove принимает аргумент компонента для удаления. cmp.remove () - неверное использование.

L: пейзаж

Попытка удалить компонент, который не существует. Ext.Container: remove принимает аргумент компонента для удаления. cmp.remove () - неверное использование.

Когда я поворачиваюсь назад к портрету, я получаю следующий вывод:

L: пейзаж

Попытка удалить компонент, который не существует. Ext.Container: remove принимает аргумент компонента для удаления. cmp.remove () - неверное использование.

L: пейзаж

Попытка удалить компонент, который не существует. Ext.Container: удаление принимает аргумент компонента для удаления. cmp.remove () - неверное использование.

P: портрет

P: портрет

Итак, если посмотреть на вращение lanscape, то это на самом деле как-то запускает функцию onorientationchange 4 раза, первый в порядке, остальные три с ошибкой, так как первый уже удалил его, вот что предупреждения, потому что я верю.

Затем с портретными я получаю два, регистрирующихся как вызовы lanscape, затем два хита, регистрирующие портретные вызовы.

Все это одним движением, поэтому почему-то код удаления и добавления работает не так, как предполагалось, и как предотвратить четыре раза вызов ориентации при вращении ??

Если у кого-то есть идеи по разработке этого, присоединяйтесь.

Спасибо за помощь, пока Si, * 1 058 *

1 Ответ

0 голосов
/ 05 февраля 2013

Много лет спустя ... и еще для того, кто, как я, наткнулся на это в поисках помощи.

Две вещи.

1) Сообщение «Попытка удалить компонентне существует "встречается только в" разрабатываемой "версии библиотеки ExtJS, и я не знаю, является ли это надежным индикатором проблемы.

2) Если вы можете выполнить обновление до ExtJS 4.1x.Это даст вам доступ к лучшим инструментам отладки.Я специально думаю о Ext JS Page Analyzer.Это поможет вам увидеть, что делает движок макета в сравнении с тем, на что вы надеетесь.

См .: http://www.sencha.com/blog/optimizing-ext-js-4-1-based-applications

...